Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > 1С: Проблемы и решения > Помогите с запросом |
Автор: ^D^ima 05.12.21, 11:22 | ||||||||||||||||||||||||||||
Запрос выдает определенные поля таблицы. Месяц, Сотрудник, Процент Вопрос - как добавить столбец к каждой записи с количеством уникальных комбинаций Месяц, Сотрудник. Т.е. должно быть что-то такое:
|
Автор: evGenius 05.12.21, 11:37 |
1. Сформировать временную таблицу, сгруппировав по Месяц, Сотрудник, КОЛИЧЕСТВО(Процент). 2. Внутреннее соединение с этой временной таблицей. |
Автор: ^D^ima 05.12.21, 13:31 |
Можно минимальный пример? |
Автор: MIF 05.12.21, 13:56 |
Пример не совпадает с текстом. Уникальных записей 04-Петров = 2, а 02-Иванов =1 |
Автор: ^D^ima 05.12.21, 19:20 |
MIF Уникальных Месяц, сотрудник, это выделено жирным |
Автор: evGenius 05.12.21, 20:38 |
Возможно так. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ВЫБРАТЬ ТЧ.Сотрудник, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТЧ.Месяц) КАК УникальныхЗаписей ПОМЕСТИТЬ Итог ИЗ ТЧ СГРУППИРОВАТЬ ПО ТЧ.Сотрудник ; ВЫБРАТЬ ТЧ.Сотрудник, ТЧ.Месяц, ТЧ.Процент, Итог.УникальныхЗаписей ИЗ ТЧ ВНУТРЕННЕЕ СОЕДИНЕНИЕ Итог ПО ТЧ.Сотрудник = Итог.Сотрудник Добавлено Видимо имелось в виду, что в столбце нужно вывести количество различных месяцев, упомянутых для сотрудника ![]() |
Автор: ^D^ima 06.12.21, 18:44 |
Цитата evGenius @ Видимо имелось в виду, что в столбце нужно вывести количество различных месяцев, упомянутых для сотрудника Да. Я так и написал ![]() |
Автор: MIF 06.12.21, 19:22 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> UPDATE aaa SET aaa.NumMonth = bbb.Cnt FROM ( SELECT Employee, COUNT(DISTINCT Month) AS cnt FROM myTable GROUP BY Employee ) AS bbb JOIN myTable aaa ON aaa.Empolyee = bbb.Employee |
Автор: ^D^ima 06.12.21, 20:20 |
А как можно найти количество различных сумм? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> КОЛИЧЕСТВО(РАЗЛИЧНЫЕ сумма(ФинальнаяТаблица.Н2_СуммаРасчетная)) КАК УникальнаяСуммаРасчетная Или придется вначале выдергивать подзазпросом сумму, а затем брать КОЛИЧЕСТВО РАЗЛИЧНЫЕ? |
Автор: ^D^ima 07.12.21, 21:01 |
Как я замучился с 1с... Преамбула: Программист оставил отчет сколько сотрудник выручил денег в месяц через СКД и свалил: Его концовка: Скрытый текст <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ВЫБРАТЬ ОтгрузкиСПрошлымиПроцентами.Период КАК Н2_Период, ОтгрузкиСПрошлымиПроцентами.Сделка КАК Н2_Сделка, ОтгрузкиСПрошлымиПроцентами.Сотрудник КАК Н2_Сотрудник, ОтгрузкиСПрошлымиПроцентами.СуммаДокумента КАК Н2_СуммаСделки, ОтгрузкиСПрошлымиПроцентами.Расходы КАК Н2_Расходы, ОтгрузкиСПрошлымиПроцентами.Выручка КАК Н2_Выручка, ОтгрузкиСПрошлымиПроцентами.АбонентскоеОбслуживание КАК Н2_АбонентскоеОбслуживание, ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузкиПрошлыйГод КАК Н2_ПроцентОтгрузкиПрошлыйГод, ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузкиПредыдущий КАК Н2_ПроцентОтгрузкиПредыдущий, ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузки КАК Н2_ПроцентОтгрузки, ВЫБОР КОГДА ОтгрузкиСПрошлымиПроцентами.АбонентскоеОбслуживание ТОГДА ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузки * ОтгрузкиСПрошлымиПроцентами.Выручка / 100 ИНАЧЕ ВЫБОР КОГДА ЕСТЬNULL(ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузки, 0) = 0 ТОГДА 0 КОГДА ЕСТЬNULL(ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузкиПредыдущий, 0) > 0 ТОГДА (ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузки - ЕСТЬNULL(ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузкиПредыдущий, 0)) * ОтгрузкиСПрошлымиПроцентами.Выручка / 100 ИНАЧЕ (ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузки - ЕСТЬNULL(ОтгрузкиСПрошлымиПроцентами.ПроцентОтгрузкиПрошлыйГод, 0)) * ОтгрузкиСПрошлымиПроцентами.Выручка / 100 КОНЕЦ КОНЕЦ КАК Н2_СуммаРасчетная, ОтгрузкиСПрошлымиПроцентами.Подразделение КАК Н2_Подразделение, ВложенныйЗапрос.КоличествоПериодов КАК КоличествоПериодов, ОтгрузкиСПрошлымиПроцентами.НомерСделкиБ24 КАК Н2_НомерСделкиБ24 ПОМЕСТИТЬ ФинальнаяТаблица ИЗ ОтгрузкиСПрошлымиПроцентами КАК ОтгрузкиСПрошлымиПроцентами ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1 КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОтгрузкиСПрошлымиПроцентами.Период) КАК КоличествоПериодов ИЗ ОтгрузкиСПрошлымиПроцентами КАК ОтгрузкиСПрошлымиПроцентами) КАК ВложенныйЗапрос ПО (ИСТИНА) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Период КАК Н2_Период, ФинальнаяТаблица.Н2_Сделка КАК Н2_Сделка, ФинальнаяТаблица.Н2_Сотрудник КАК Н2_Сотрудник, ФинальнаяТаблица.Н2_СуммаСделки КАК Н2_СуммаСделки, ФинальнаяТаблица.Н2_Расходы КАК Н2_Расходы, ФинальнаяТаблица.Н2_Выручка КАК Н2_Выручка, ФинальнаяТаблица.Н2_АбонентскоеОбслуживание КАК Н2_АбонентскоеОбслуживание, ФинальнаяТаблица.Н2_ПроцентОтгрузкиПрошлыйГод КАК Н2_ПроцентОтгрузкиПрошлыйГод, ФинальнаяТаблица.Н2_ПроцентОтгрузкиПредыдущий КАК Н2_ПроцентОтгрузкиПредыдущий, ФинальнаяТаблица.Н2_ПроцентОтгрузки КАК Н2_ПроцентОтгрузки, ВЫБОР КОГДА ВЫРАЗИТЬ(ФинальнаяТаблица.Н2_Подразделение КАК Справочник.СтруктурныеЕдиницы).Наименование ПОДОБНО "Юридическое сопровождение бизнеса" И ФинальнаяТаблица.Н2_Период < ДАТАВРЕМЯ(2020, 4, 1) ТОГДА 0 ИНАЧЕ ФинальнаяТаблица.Н2_СуммаРасчетная КОНЕЦ КАК Н2_СуммаРасчетная, ФинальнаяТаблица.Н2_Подразделение КАК Н2_Подразделение, ВЫБОР КОГДА ВЫРАЗИТЬ(ФинальнаяТаблица.Н2_Подразделение КАК Справочник.СтруктурныеЕдиницы).Наименование ПОДОБНО "Юридическое сопровождение бизнеса" И ФинальнаяТаблица.Н2_Период < ДАТАВРЕМЯ(2021, 1, 1) ТОГДА ВЫБОР КОГДА ФинальнаяТаблица.КоличествоПериодов - 3 < 0 ТОГДА 0 ИНАЧЕ ФинальнаяТаблица.КоличествоПериодов - 3 КОНЕЦ ИНАЧЕ ФинальнаяТаблица.КоличествоПериодов КОНЕЦ КАК КоличествоПериодов, ФинальнаяТаблица.Н2_НомерСделкиБ24 КАК Н2_НомерСделкиБ24 ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица Косяк в том, что он КоличествоПериодов считал из количества месяцев, а так как сотрудник мог в месяц ничего не заработать, средняя сумма(среднее число выручки \ КоличествоПериодов) не соответствовало реальности. Например отчет за 4 месяца, а 2 месяца сотрудник не работал, получалось что отчет сумму выручки делил на 4 а не на 2. Я этот косяк исправил: Просуммировал все суммы по сотрудникам. Нашел количество уникальных сумм. На это число и предполагалось делить общую сумму выручки Скрытый текст <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ФинальнаяТаблица.Н2_Период КАК Н2_Период, СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная ПОМЕСТИТЬ ТаблицаУникальнаяСуммаРасчетнаяСумма ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ГДЕ ФинальнаяТаблица.Н2_СуммаРасчетная > 0 СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник, ФинальнаяТаблица.Н2_Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТаблицаУникальнаяСуммаРасчетнаяСумма.УникальнаяСуммаРасчетная) КАК УникальнаяСуммаРасчетная ПОМЕСТИТЬ ТаблицаУникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаУникальнаяСуммаРасчетнаяСумма КАК ТаблицаУникальнаяСуммаРасчетнаяСумма ПО ФинальнаяТаблица.Н2_Сотрудник = ТаблицаУникальнаяСуммаРасчетнаяСумма.Сотрудник СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Период КАК Н2_Период, ФинальнаяТаблица.Н2_Сделка КАК Н2_Сделка, ФинальнаяТаблица.Н2_Сотрудник КАК Н2_Сотрудник, ФинальнаяТаблица.Н2_СуммаСделки КАК Н2_СуммаСделки, ФинальнаяТаблица.Н2_Расходы КАК Н2_Расходы, ФинальнаяТаблица.Н2_Выручка КАК Н2_Выручка, ФинальнаяТаблица.Н2_АбонентскоеОбслуживание КАК Н2_АбонентскоеОбслуживание, ФинальнаяТаблица.Н2_ПроцентОтгрузкиПрошлыйГод КАК Н2_ПроцентОтгрузкиПрошлыйГод, ФинальнаяТаблица.Н2_ПроцентОтгрузкиПредыдущий КАК Н2_ПроцентОтгрузкиПредыдущий, ФинальнаяТаблица.Н2_ПроцентОтгрузки КАК Н2_ПроцентОтгрузки, ФинальнаяТаблица.Н2_СуммаРасчетная КАК Н2_СуммаРасчетная, ФинальнаяТаблица.Н2_Подразделение КАК Н2_Подразделение, ТаблицаУникальнаяСуммаРасчетная.УникальнаяСуммаРасчетная КАК КоличествоПериодов, ФинальнаяТаблица.Н2_НомерСделкиБ24 КАК Н2_НомерСделкиБ24 ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаУникальнаяСуммаРасчетная КАК ТаблицаУникальнаяСуммаРасчетная ПО ФинальнаяТаблица.Н2_Сотрудник = ТаблицаУникальнаяСуммаРасчетная.Сотрудник Проблема: Само название переменной КоличествоПериодов я не менял, но в самом графическом отображении отчета получаю в КоличествоПериодов везде 1: Вот результаты запроса(новые и старые отчеты совпадают по значениям кроме переменной КоличествоПериодов): Например у "Юлия" стоит период 2 в результате запроса, а в графике 1 Вот такой результат со старым запросом(4 месяца) ![]() Вот такой результат с новым запросом ![]() Сами данные(на основании консоли запросов) ![]() Так это выглядит в СКД: ![]() Где я допустил ошибку? |
Автор: ^D^ima 07.12.21, 21:34 |
Походу это СКД что-то оптимизирует. Как это х-ню отключить? |
Автор: Rust 09.12.21, 08:13 |
При помощи Консоли СКД (аналог консоли запросов) можно посмотреть результирующий запрос к базе. Выгрузи схему отчета и настройки в файл, загрузи в СКД, нажми Сформировать. На закладке "Макет для табличного документа" можно найти текст запроса, который реально будет исполняться системой при формировании отчета |
Автор: ^D^ima 28.03.22, 21:21 |
Я разобрался. В консоли запросов такой запрос: Скрытый текст <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ФинальнаяТаблица.Н2_Период КАК Н2_Период, СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная ПОМЕСТИТЬ ТаблицаУникальнаяСуммаРасчетнаяСумма ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ГДЕ ФинальнаяТаблица.Н2_СуммаРасчетная > 0 СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник, ФинальнаяТаблица.Н2_Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ТаблицаУникальнаяСуммаРасчетнаяСумма.УникальнаяСуммаРасчетная КАК УникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаУникальнаяСуммаРасчетнаяСумма КАК ТаблицаУникальнаяСуммаРасчетнаяСумма ПО ФинальнаяТаблица.Н2_Сотрудник = ТаблицаУникальнаяСуммаРасчетнаяСумма.Сотрудник Обрабатывается так что для Сотрудник имеет несколько записей УникальнаяСуммаРасчетная А долбанная СКД при том-же запросе почему-то группирует по Сотрудник и на выходе получается 1 Сотрудник и 1 запись УникальнаяСуммаРасчетная. Получается что результат работы 1 запроса(если визуально вывести данные на экран через СКД) не соответствуют тому что он положил во временную таблицу(ТаблицаУникальнаяСуммаРасчетнаяСумма). Это как так? Переделал без временной таблицы, в 1 запросе: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.УникальнаяСуммаРасчетная) КАК УникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ФинальнаяТаблица.Н2_Период КАК Н2_Период, СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ГДЕ ФинальнаяТаблица.Н2_СуммаРасчетная > 0 СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник, ФинальнаяТаблица.Н2_Период) КАК ВложенныйЗапрос ПО ФинальнаяТаблица.Н2_Сотрудник = ВложенныйЗапрос.Сотрудник СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник Все заработало. |