|
Что не так с соединением в запросе? | ☑ | ||
---|---|---|---|---|
0
twerp
04.12.19
✎
10:08
|
Не сходится сумма по полю ОбщийДоходПоСпециальности с суммой полученной в предыдущем запросе.
Проверяю просто: Если удалить из последнего запроса соединение с виртуальной таблицей РегистраСведений.БиТ_НагрузкаПоСпециальностям Сумма поля ОбщийДоходПоСпециальности больше(такая же как на предыдущем этапе). Добавляю Левое соединение как в примере ниже - сумма поля ОбщийДоходПоСпециальности становится меньше. Пробовал сделать отдельный запрос в виртуальной таблице, поместить ее во временную таблицу и с ней соединять. Без разницы. Пробовал Полное соединение - аналогично, сумма меньше. Вопрос: При левом соединении все строки первой таблицы (ДоходПоСпециальностям ) должны попадать, т.е. сумма не должна меняться? Пробовал на платформах 8.3.16.1063 и 8.3.13.1513. Конфигурация БГУ 1.0 + БИТ УФГУ ВЫБРАТЬ БиТ_СтудентыПоСпециальностямОрловский.Специальность, БиТ_СтудентыПоСпециальностямОрловский.ФормаОбучения, БиТ_СтудентыПоСпециальностямОрловский.УровеньОбразования, БиТ_СтудентыПоСпециальностямОрловский.КФО, БиТ_СтудентыПоСпециальностямОрловский.ЦФО, СУММА(ВЫБОР КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 1 ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов ИНАЧЕ 0 КОНЕЦ) КАК КоличествоСтудентовПервогоКурса, СУММА(ВЫБОР КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 2 ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов ИНАЧЕ 0 КОНЕЦ) КАК КоличествоСтудентовВторогоКурса, СУММА(ВЫБОР КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 3 ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов ИНАЧЕ 0 КОНЕЦ) КАК КоличествоСтудентовТретьегоКурса, СУММА(ВЫБОР КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 4 ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов ИНАЧЕ 0 КОНЕЦ) КАК КоличествоСтудентовЧетвертогоКурса, СУММА(ВЫБОР КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 5 ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов ИНАЧЕ 0 КОНЕЦ) КАК КоличествоСтудентовПятогоКурса, СУММА(ВЫБОР КОГДА БиТ_СтудентыПоСпециальностямОрловский.Курс = 6 ТОГДА БиТ_СтудентыПоСпециальностямОрловский.КоличествоСтудентов ИНАЧЕ 0 КОНЕЦ) КАК КоличествоСтудентовШестогоКурса, БиТ_СтудентыПоСпециальностямОрловский.ГруппаУровнейОбразования ПОМЕСТИТЬ СтудентыПоСпециальностям ИЗ РегистрСведений.БиТ_СтудентыПоСпециальностямОрловский КАК БиТ_СтудентыПоСпециальностямОрловский ГДЕ БиТ_СтудентыПоСпециальностямОрловский.Период МЕЖДУ &ПериодНачало И &Период СГРУППИРОВАТЬ ПО БиТ_СтудентыПоСпециальностямОрловский.Специальность, БиТ_СтудентыПоСпециальностямОрловский.ФормаОбучения, БиТ_СтудентыПоСпециальностямОрловский.УровеньОбразования, БиТ_СтудентыПоСпециальностямОрловский.КФО, БиТ_СтудентыПоСпециальностямОрловский.ЦФО, БиТ_СтудентыПоСпециальностямОрловский.ГруппаУровнейОбразования ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ БиТ_СтоимостьОбученияОрловский.Период, БиТ_СтоимостьОбученияОрловский.Регистратор, БиТ_СтоимостьОбученияОрловский.НомерСтроки, БиТ_СтоимостьОбученияОрловский.Активность, БиТ_СтоимостьОбученияОрловский.Специальность, БиТ_СтоимостьОбученияОрловский.ФормаОбучения, БиТ_СтоимостьОбученияОрловский.УровеньОбразования, БиТ_СтоимостьОбученияОрловский.ГруппаУровнейОбразования, БиТ_СтоимостьОбученияОрловский.Сумма1Курс, БиТ_СтоимостьОбученияОрловский.Сумма2Курс, БиТ_СтоимостьОбученияОрловский.Сумма3Курс, БиТ_СтоимостьОбученияОрловский.Сумма4Курс, БиТ_СтоимостьОбученияОрловский.Сумма5Курс, БиТ_СтоимостьОбученияОрловский.Сумма6Курс ПОМЕСТИТЬ СтоимостьОбученияВыбранОдинГод ИЗ РегистрСведений.БиТ_СтоимостьОбученияОрловский КАК БиТ_СтоимостьОбученияОрловский ГДЕ БиТ_СтоимостьОбученияОрловский.Период МЕЖДУ &ПериодНачало И &Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СтудентыПоСпециальностям.КФО, СтудентыПоСпециальностям.ФормаОбучения, СтудентыПоСпециальностям.УровеньОбразования, СУММА(СтоимостьОбученияВыбранОдинГод.Сумма1Курс * СтудентыПоСпециальностям.КоличествоСтудентовПервогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма2Курс * СтудентыПоСпециальностям.КоличествоСтудентовВторогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма3Курс * СтудентыПоСпециальностям.КоличествоСтудентовТретьегоКурса + СтоимостьОбученияВыбранОдинГод.Сумма4Курс * СтудентыПоСпециальностям.КоличествоСтудентовЧетвертогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма5Курс * СтудентыПоСпециальностям.КоличествоСтудентовПятогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма6Курс * СтудентыПоСпециальностям.КоличествоСтудентовШестогоКурса) КАК ОбщийДоходПоСпециальности, СтудентыПоСпециальностям.Специальность ПОМЕСТИТЬ ДоходПоСпециальностям ИЗ СтудентыПоСпециальностям КАК СтудентыПоСпециальностям ВНУТРЕННЕЕ СОЕДИНЕНИЕ СтоимостьОбученияВыбранОдинГод КАК СтоимостьОбученияВыбранОдинГод ПО СтудентыПоСпециальностям.Специальность = СтоимостьОбученияВыбранОдинГод.Специальность И СтудентыПоСпециальностям.ФормаОбучения = СтоимостьОбученияВыбранОдинГод.ФормаОбучения И СтудентыПоСпециальностям.УровеньОбразования = СтоимостьОбученияВыбранОдинГод.УровеньОбразования И СтудентыПоСпециальностям.ГруппаУровнейОбразования = СтоимостьОбученияВыбранОдинГод.ГруппаУровнейОбразования СГРУППИРОВАТЬ ПО СтудентыПоСпециальностям.Специальность, СтудентыПоСпециальностям.КФО, СтудентыПоСпециальностям.ФормаОбучения, СтудентыПоСпециальностям.УровеньОбразования ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДоходПоСпециальностям.Специальность КАК Специальность, БиТ_НагрузкаПоСпециальностямСрезПоследних.ЦФО КАК ЦФО, БиТ_НагрузкаПоСпециальностямСрезПоследних.КоэффициентВклада КАК КоэффициентВклада, ДоходПоСпециальностям.ОбщийДоходПоСпециальности КАК ОбщийДоходПоСпециальности, ДоходПоСпециальностям.КФО, ДоходПоСпециальностям.ФормаОбучения, ДоходПоСпециальностям.УровеньОбразования, ДоходПоСпециальностям.Специальность.Код ИЗ ДоходПоСпециальностям КАК ДоходПоСпециальностям ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БиТ_НагрузкаПоСпециальностям.СрезПоследних(&Период, ) КАК БиТ_НагрузкаПоСпециальностямСрезПоследних ПО ДоходПоСпециальностям.Специальность = БиТ_НагрузкаПоСпециальностямСрезПоследних.Специальность |
|||
1
sevod
04.12.19
✎
10:49
|
(0) "Вопрос: При левом соединении все строки первой таблицы (ДоходПоСпециальностям ) должны попадать, т.е. сумма не должна меняться?"
По идее да. С левого попадает все, с правого если нет то NULL. А как проверяешь сумму "ОбщийДоходПоСпециальности"? Калькулятором? Или в отчете потом? Засунь в консоль запросов где временные таблицы показывает. Можешь там дополнительные временные таблицы ваять для тестов, где будет количество строк показывать, сумму и т.д. В самой консоли запросов анализируй. |
|||
2
twerp
04.12.19
✎
11:11
|
Проверяю по разному. Работаю с Инструментами разработчика, кнопка "показывать подвал с итогами". Перенес в Excel, дабы убедится.
еще интересней. из последнего запроса сделал виртуальную таблицу, и на следующем этапе удалил из нее поля регистра сведений и вуаля, сумма опять верная. |
|||
3
pasha_d
04.12.19
✎
12:10
|
Попробуй числовые значения на Null - естьnull(твоеполе, 0)
|
|||
4
twerp
04.12.19
✎
14:26
|
(3) Попробовал. Каждому числовому значения установил проверку естьnull(). Не помогло.
Буду соединять в цикле. |
|||
5
Ёпрст
04.12.19
✎
14:55
|
(0) это же не весь текст запроса?
|
|||
6
dezss
04.12.19
✎
14:59
|
Сумма может стать больше. Меньше - как-то врятли.
Ты уверен, что она меньше, а не больше? А количество строк изменяется? |
|||
7
Ёпрст
04.12.19
✎
15:01
|
(6) меньше, легко.
ТС забыл показать условие в этом запросе. |
|||
8
twerp
04.12.19
✎
15:18
|
(5) Это весь запрос целиком. Законченная логическая единица. Дальше результат записывается в табличную часть.
(7) Запрос не имеет отборов, условий. |
|||
9
twerp
04.12.19
✎
15:23
|
(6) Уверен что сумма стала меньше.
До соединения с регистром сведений 40 строк, Сумма 140 055 527 После соединения 371 строка, Сумма 1 387 583 676 Соединение как вы поняли один ко многим. |
|||
10
twerp
04.12.19
✎
15:31
|
Замылен глаз, спасибо.
|
|||
11
inkvizitr
04.12.19
✎
15:34
|
до соединения у тебя 40 строк а после соединения 371, а в итоге сколько у тебя записей то должно быть?
|
|||
12
inkvizitr
04.12.19
✎
15:35
|
если ты соединяешь левым соединением и с права будут две записи относится к одной левой то у тебя появится вместо одной строки две
|
|||
13
twerp
04.12.19
✎
15:36
|
(11) 140 млн. мне казались большим числом чем 1387 млн.
|
|||
14
inkvizitr
04.12.19
✎
15:36
|
пример
Петров 170р Петров 240р где петров это одна запись, если 170+240 должно относится к петрову, то группируй лучше |
|||
15
inkvizitr
04.12.19
✎
15:58
|
(13) вот твои выходные поля из запроса, в каком именно из них у тебя рисуется 140 миллионов
ДоходПоСпециальностям.Специальность КАК Специальность, БиТ_НагрузкаПоСпециальностямСрезПоследних.ЦФО КАК ЦФО, БиТ_НагрузкаПоСпециальностямСрезПоследних.КоэффициентВклада КАК КоэффициентВклада, ДоходПоСпециальностям.ОбщийДоходПоСпециальности КАК ОбщийДоходПоСпециальности, ДоходПоСпециальностям.КФО, ДоходПоСпециальностям.ФормаОбучения, ДоходПоСпециальностям.УровеньОбразования, ДоходПоСпециальностям.Специальность.Код ОбщийДоходПоСпециальности?? |
|||
16
twerp
04.12.19
✎
16:05
|
(15) да это поле ОбщийДоходПоСпециальности
СУММА(СтоимостьОбученияВыбранОдинГод.Сумма1Курс * СтудентыПоСпециальностям.КоличествоСтудентовПервогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма2Курс * СтудентыПоСпециальностям.КоличествоСтудентовВторогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма3Курс * СтудентыПоСпециальностям.КоличествоСтудентовТретьегоКурса + СтоимостьОбученияВыбранОдинГод.Сумма4Курс * СтудентыПоСпециальностям.КоличествоСтудентовЧетвертогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма5Курс * СтудентыПоСпециальностям.КоличествоСтудентовПятогоКурса + СтоимостьОбученияВыбранОдинГод.Сумма6Курс * СтудентыПоСпециальностям.КоличествоСтудентовШестогоКурса) КАК ОбщийДоходПоСпециальности Все время ориентировался на это поле ОбщийДоходПоСпециальности. Считал его сумму и не мог понять почему меньше? После соединения с регистром сведений получалось 371 строка. и сумма по полю ОбщийДоходПоСпециальности получалась 1387млн. Запрос отрабатывал правильно. 140 млн. мне казались большим числом чем 1387 млн. |
|||
17
inkvizitr
04.12.19
✎
16:10
|
До соединения с регистром сведений 40 строк, Сумма 140 055 527
После соединения 371 строка, Сумма 1 387 583 676 по моему 1 387 583 676 намного больше чем 140 055 527 |
|||
18
inkvizitr
04.12.19
✎
16:12
|
1. я ничего не понял, у тебя раньше был 1.3 миллиарда рублей а потом стало 140 миллионов
2. У тебя было 140 миллионов, а потом стало 1.3 миллиарда |
|||
19
inkvizitr
04.12.19
✎
16:12
|
(16) если стал 1.3 миллиарда, то стало понятно т.к. количество записей увеличилось
|
|||
20
inkvizitr
04.12.19
✎
16:12
|
все исходит из того как я писал выше (12) (14)
|
|||
21
twerp
04.12.19
✎
16:13
|
(17)
Все верно. написал 9 сообщение. Перечитал, понял что ошибался все это время и в 10 сообщении отписался: Замылен глаз, спасибо. Еще раз всем спасибо! |
|||
22
inkvizitr
04.12.19
✎
16:15
|
никогда раньше не слышал такого выражения "Замылен глаз", как мы должны догадаться, что эта фраза означает, что вы во всем разобрались?
|
|||
23
dezss
05.12.19
✎
09:18
|
(22) ого...не думал, что встречу такого человека в русскоязычном сегменте инета)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |