Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.231.219.178] |
|
Сообщ.
#1
,
|
|||||||||||||||||||||||||||||
|
Запрос выдает определенные поля таблицы.
Месяц, Сотрудник, Процент Вопрос - как добавить столбец к каждой записи с количеством уникальных комбинаций Месяц, Сотрудник. Т.е. должно быть что-то такое:
|
Сообщ.
#2
,
|
|
|
1. Сформировать временную таблицу, сгруппировав по Месяц, Сотрудник, КОЛИЧЕСТВО(Процент).
2. Внутреннее соединение с этой временной таблицей. |
Сообщ.
#3
,
|
|
|
Можно минимальный пример?
|
Сообщ.
#4
,
|
|
|
Пример не совпадает с текстом. Уникальных записей 04-Петров = 2, а 02-Иванов =1
|
Сообщ.
#5
,
|
|
|
MIF
Уникальных Месяц, сотрудник, это выделено жирным |
Сообщ.
#6
,
|
|
|
Возможно так.
ВЫБРАТЬ ТЧ.Сотрудник, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТЧ.Месяц) КАК УникальныхЗаписей ПОМЕСТИТЬ Итог ИЗ ТЧ СГРУППИРОВАТЬ ПО ТЧ.Сотрудник ; ВЫБРАТЬ ТЧ.Сотрудник, ТЧ.Месяц, ТЧ.Процент, Итог.УникальныхЗаписей ИЗ ТЧ ВНУТРЕННЕЕ СОЕДИНЕНИЕ Итог ПО ТЧ.Сотрудник = Итог.Сотрудник Добавлено Видимо имелось в виду, что в столбце нужно вывести количество различных месяцев, упомянутых для сотрудника |
Сообщ.
#7
,
|
|
|
Цитата evGenius @ Видимо имелось в виду, что в столбце нужно вывести количество различных месяцев, упомянутых для сотрудника Да. Я так и написал |
Сообщ.
#8
,
|
|
|
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 |
Сообщ.
#9
,
|
|
|
А как можно найти количество различных сумм?
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ сумма(ФинальнаяТаблица.Н2_СуммаРасчетная)) КАК УникальнаяСуммаРасчетная Или придется вначале выдергивать подзазпросом сумму, а затем брать КОЛИЧЕСТВО РАЗЛИЧНЫЕ? |
Сообщ.
#10
,
|
|
|
Как я замучился с 1с...
Преамбула: Программист оставил отчет сколько сотрудник выручил денег в месяц через СКД и свалил: Его концовка: Скрытый текст ВЫБРАТЬ ОтгрузкиСПрошлымиПроцентами.Период КАК Н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. Я этот косяк исправил: Просуммировал все суммы по сотрудникам. Нашел количество уникальных сумм. На это число и предполагалось делить общую сумму выручки Скрытый текст //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н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 месяца) Прикреплённый файлOldQuery.png (18,03 Кбайт, скачиваний: 61) Вот такой результат с новым запросом Прикреплённый файлNewQuery.png (17,98 Кбайт, скачиваний: 69) Сами данные(на основании консоли запросов) Прикреплённый файлOldNewQuery.rar (38,27 Кбайт, скачиваний: 69) Так это выглядит в СКД: Прикреплённый файлSKD.png (40,37 Кбайт, скачиваний: 68) Где я допустил ошибку? |
Сообщ.
#11
,
|
|
|
Походу это СКД что-то оптимизирует. Как это х-ню отключить?
|
Сообщ.
#12
,
|
|
|
Цитата ^D^ima @ Походу это СКД что-то оптимизирует. Как это х-ню отключить? При помощи Консоли СКД (аналог консоли запросов) можно посмотреть результирующий запрос к базе. Выгрузи схему отчета и настройки в файл, загрузи в СКД, нажми Сформировать. На закладке "Макет для табличного документа" можно найти текст запроса, который реально будет исполняться системой при формировании отчета |
Сообщ.
#13
,
|
|
|
Я разобрался.
В консоли запросов такой запрос: Скрытый текст //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ФинальнаяТаблица.Н2_Период КАК Н2_Период, СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная ПОМЕСТИТЬ ТаблицаУникальнаяСуммаРасчетнаяСумма ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ГДЕ ФинальнаяТаблица.Н2_СуммаРасчетная > 0 СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник, ФинальнаяТаблица.Н2_Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ТаблицаУникальнаяСуммаРасчетнаяСумма.УникальнаяСуммаРасчетная КАК УникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаУникальнаяСуммаРасчетнаяСумма КАК ТаблицаУникальнаяСуммаРасчетнаяСумма ПО ФинальнаяТаблица.Н2_Сотрудник = ТаблицаУникальнаяСуммаРасчетнаяСумма.Сотрудник Обрабатывается так что для Сотрудник имеет несколько записей УникальнаяСуммаРасчетная А долбанная СКД при том-же запросе почему-то группирует по Сотрудник и на выходе получается 1 Сотрудник и 1 запись УникальнаяСуммаРасчетная. Получается что результат работы 1 запроса(если визуально вывести данные на экран через СКД) не соответствуют тому что он положил во временную таблицу(ТаблицаУникальнаяСуммаРасчетнаяСумма). Это как так? Переделал без временной таблицы, в 1 запросе: ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.УникальнаяСуммаРасчетная) КАК УникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник, ФинальнаяТаблица.Н2_Период КАК Н2_Период, СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная ИЗ ФинальнаяТаблица КАК ФинальнаяТаблица ГДЕ ФинальнаяТаблица.Н2_СуммаРасчетная > 0 СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник, ФинальнаяТаблица.Н2_Период) КАК ВложенныйЗапрос ПО ФинальнаяТаблица.Н2_Сотрудник = ВложенныйЗапрос.Сотрудник СГРУППИРОВАТЬ ПО ФинальнаяТаблица.Н2_Сотрудник Все заработало. |