Здравствуйте. Я не понимаю некоторые моменты при работе с запросом. А именно как правильно делать связь, группировку. Вот запрос который я "написал". Он объемный. Проблема с этой временной таблицей:
Фрагмент запроса
ВЫБРАТЬ
ВЫБОР
КОГДА МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) = МЕСЯЦ(&ДатаНачала)
ТОГДА ЕСТЬNULL(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот, 0)
ИНАЧЕ 0
КОНЕЦ КАК ОтработанныеДни2_1_1,
ВЫБОР
КОГДА МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) > МЕСЯЦ(&ДатаНачала)
И МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) < МЕСЯЦ(&ДатаОкончания)
ТОГДА ЕСТЬNULL(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот, 0)
ИНАЧЕ 0
КОНЕЦ КАК ОтработанныеДни2_1_2,
ВЫБОР
КОГДА МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) = МЕСЯЦ(&ДатаОкончания)
ТОГДА ЕСТЬNULL(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот, 0)
ИНАЧЕ 0
КОНЕЦ КАК ОтработанныеДни2_1_3,
ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТ_Дни
ИЗ
РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников.Обороты(, , , ) КАК ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты
ГДЕ
ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ВидУчетаВремени = &ВидУчетаВремени
СГРУППИРОВАТЬ ПО
ВЫБОР
КОГДА МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) = МЕСЯЦ(&ДатаНачала)
ТОГДА ЕСТЬNULL(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот, 0)
ИНАЧЕ 0
КОНЕЦ,
ВЫБОР
КОГДА МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) > МЕСЯЦ(&ДатаНачала)
И МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) < МЕСЯЦ(&ДатаОкончания)
ТОГДА ЕСТЬNULL(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот, 0)
ИНАЧЕ 0
КОНЕЦ,
ВЫБОР
КОГДА МЕСЯЦ(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ПериодРегистрации) = МЕСЯЦ(&ДатаОкончания)
ТОГДА ЕСТЬNULL(ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.ДниОборот, 0)
ИНАЧЕ 0
КОНЕЦ,
ДанныеТабельногоУчетаРабочегоВремениСотрудниковОбороты.Сотрудник
;
Показать
В результ. таблице делаю связь:
ИЗ ВТ_Начисления КАК ВТ_Начисления
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Дни КАК ВТ_Дни
ПО ВТ_Начисления.Сотрудник = ВТ_Дни.Сотрудник
В таком случае результат такой: СКРИН. Если эту временную таблицу удалить результат колонки "начисления" правильный: СКРИН. Если я просуммирую в конеч. таблице эти поля то результат такое: СКРИН.
Подскажите, пожалуйста, как в чем моя ошибка и как правильно делать.
(1) Здравствуйте, проблема в том, что в первой таблице у вас несколько записей получается, по всей видимости первую таблицу надо не группировать, а суммировать (колонки с числами)
Тогда у вас будет запись
Сотрудник 2 2 2
А сейчас у вас записи
Сотрудник 1 0 1
Сотрудник 0 0 1
Сотрудник 0 0 0
И так далее
Утрированно: когда вы получаете виртуальную таблицу без параметров вы получаете большой массив записей, на который уже потом накладывается условие ГДЕ и отбираются необходимые записи.
Если же вы сразу передаете параметры в виртуальную таблицу, то получаете сразу сроки с необходимым отбором, сокращая время получения и дальнейшей обработки запроса.
Вариант без использования параметров вирт. таблицы работать будет, но на больших объемах данных может начать жутко тормозить или вообще не сможет получить данные, т.к. не хватит памяти собрать все записи.
(1) Здравствуйте, проблема в том, что в первой таблице у вас несколько записей получается, по всей видимости первую таблицу надо не группировать, а суммировать (колонки с числами)
Тогда у вас будет запись
Сотрудник 2 2 2
А сейчас у вас записи
Сотрудник 1 0 1
Сотрудник 0 0 1
Сотрудник 0 0 0
И так далее
А в колонке ФИН вообще пусто!
Что Вы показали? Три строчки запроса. И хотите получить помощь.
Ну-ну...
И вообще конструктором запроса пользуйтесь. Рано Вам еще ручками запросы писать.
Утрированно: когда вы получаете виртуальную таблицу без параметров вы получаете большой массив записей, на который уже потом накладывается условие ГДЕ и отбираются необходимые записи.
Если же вы сразу передаете параметры в виртуальную таблицу, то получаете сразу сроки с необходимым отбором, сокращая время получения и дальнейшей обработки запроса.
Вариант без использования параметров вирт. таблицы работать будет, но на больших объемах данных может начать жутко тормозить или вообще не сможет получить данные, т.к. не хватит памяти собрать все записи.