На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:

  • Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
  • Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
  • Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.

Высказать своё мнение о модераторах раздела можно здесь: evGenius
Модераторы: evGenius
  
> Помогите с запросом
    Запрос выдает определенные поля таблицы.
    Месяц, Сотрудник, Процент



    Вопрос - как добавить столбец к каждой записи с количеством уникальных комбинаций Месяц, Сотрудник.

    Т.е. должно быть что-то такое:
    МесяцСотрудникПроцентУникальных записей
    01Иванов502
    01Иванов602
    02Иванов702
    04Петров601
    04Петров701
    04Петров701
      1. Сформировать временную таблицу, сгруппировав по Месяц, Сотрудник, КОЛИЧЕСТВО(Процент).
      2. Внутреннее соединение с этой временной таблицей.
        Можно минимальный пример?
            Пример не совпадает с текстом. Уникальных записей 04-Петров = 2, а 02-Иванов =1
            Сообщение отредактировано: MIF -
              MIF
              Уникальных Месяц, сотрудник, это выделено жирным
                Возможно так.
                ExpandedWrap disabled
                  ВЫБРАТЬ
                    ТЧ.Сотрудник,
                    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТЧ.Месяц) КАК УникальныхЗаписей
                  ПОМЕСТИТЬ Итог
                  ИЗ
                    ТЧ
                  СГРУППИРОВАТЬ ПО
                    ТЧ.Сотрудник
                  ;
                   
                  ВЫБРАТЬ
                    ТЧ.Сотрудник,
                    ТЧ.Месяц,
                    ТЧ.Процент,
                    Итог.УникальныхЗаписей
                  ИЗ
                    ТЧ ВНУТРЕННЕЕ СОЕДИНЕНИЕ Итог ПО ТЧ.Сотрудник = Итог.Сотрудник


                Добавлено
                Видимо имелось в виду, что в столбце нужно вывести количество различных месяцев, упомянутых для сотрудника :wacko:
                  Цитата evGenius @
                  Видимо имелось в виду, что в столбце нужно вывести количество различных месяцев, упомянутых для сотрудника

                  Да. Я так и написал :)
                    ExpandedWrap disabled
                      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
                      А как можно найти количество различных сумм?
                      ExpandedWrap disabled
                        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ сумма(ФинальнаяТаблица.Н2_СуммаРасчетная)) КАК УникальнаяСуммаРасчетная

                      Или придется вначале выдергивать подзазпросом сумму, а затем брать КОЛИЧЕСТВО РАЗЛИЧНЫЕ?
                        Как я замучился с 1с...

                        Преамбула:
                        Программист оставил отчет сколько сотрудник выручил денег в месяц через СКД и свалил:
                        Его концовка:
                        Скрытый текст

                        ExpandedWrap disabled
                          ВЫБРАТЬ
                              ОтгрузкиСПрошлымиПроцентами.Период КАК Н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.

                        Я этот косяк исправил: Просуммировал все суммы по сотрудникам. Нашел количество уникальных сумм. На это число и предполагалось делить общую сумму выручки

                        Скрытый текст
                        ExpandedWrap disabled
                          ////////////////////////////////////////////////////////////////////////////////
                          ВЫБРАТЬ
                              ФинальнаяТаблица.Н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 Кбайт, скачиваний: 26)

                        Вот такой результат с новым запросом
                        Прикреплённый файлПрикреплённый файлNewQuery.png (17,98 Кбайт, скачиваний: 24)

                        Сами данные(на основании консоли запросов)
                        Прикреплённый файлПрикреплённый файлOldNewQuery.rar (38,27 Кбайт, скачиваний: 21)

                        Так это выглядит в СКД:
                        Прикреплённый файлПрикреплённый файлSKD.png (40,37 Кбайт, скачиваний: 26)

                        Где я допустил ошибку?
                          Походу это СКД что-то оптимизирует. Как это х-ню отключить?
                            Цитата ^D^ima @
                            Походу это СКД что-то оптимизирует. Как это х-ню отключить?

                            При помощи Консоли СКД (аналог консоли запросов) можно посмотреть результирующий запрос к базе.
                            Выгрузи схему отчета и настройки в файл, загрузи в СКД, нажми Сформировать. На закладке "Макет для табличного документа" можно найти текст запроса, который реально будет исполняться системой при формировании отчета


                                Я разобрался.
                                В консоли запросов такой запрос:
                                Скрытый текст

                                ExpandedWrap disabled
                                  ////////////////////////////////////////////////////////////////////////////////
                                  ВЫБРАТЬ
                                      ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник,
                                      ФинальнаяТаблица.Н2_Период КАК Н2_Период,
                                      СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная
                                  ПОМЕСТИТЬ ТаблицаУникальнаяСуммаРасчетнаяСумма
                                  ИЗ
                                      ФинальнаяТаблица КАК ФинальнаяТаблица
                                  ГДЕ
                                      ФинальнаяТаблица.Н2_СуммаРасчетная > 0
                                   
                                  СГРУППИРОВАТЬ ПО
                                      ФинальнаяТаблица.Н2_Сотрудник,
                                      ФинальнаяТаблица.Н2_Период
                                  ;
                                   
                                  ////////////////////////////////////////////////////////////////////////////////
                                  ВЫБРАТЬ
                                      ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник,
                                      ТаблицаУникальнаяСуммаРасчетнаяСумма.УникальнаяСуммаРасчетная КАК УникальнаяСуммаРасчетная
                                  ИЗ
                                      ФинальнаяТаблица КАК ФинальнаяТаблица
                                          ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаУникальнаяСуммаРасчетнаяСумма КАК ТаблицаУникальнаяСуммаРасчетнаяСумма
                                          ПО ФинальнаяТаблица.Н2_Сотрудник = ТаблицаУникальнаяСуммаРасчетнаяСумма.Сотрудник



                                Обрабатывается так что для Сотрудник имеет несколько записей УникальнаяСуммаРасчетная
                                А долбанная СКД при том-же запросе почему-то группирует по Сотрудник и на выходе получается 1 Сотрудник и 1 запись УникальнаяСуммаРасчетная.
                                Получается что результат работы 1 запроса(если визуально вывести данные на экран через СКД) не соответствуют тому что он положил во временную таблицу(ТаблицаУникальнаяСуммаРасчетнаяСумма). Это как так?

                                Переделал без временной таблицы, в 1 запросе:
                                ExpandedWrap disabled
                                  ВЫБРАТЬ
                                      ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник,
                                      КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос.УникальнаяСуммаРасчетная) КАК УникальнаяСуммаРасчетная
                                  ИЗ
                                      ФинальнаяТаблица КАК ФинальнаяТаблица
                                          ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                                              ФинальнаяТаблица.Н2_Сотрудник КАК Сотрудник,
                                              ФинальнаяТаблица.Н2_Период КАК Н2_Период,
                                              СУММА(ФинальнаяТаблица.Н2_СуммаРасчетная) КАК УникальнаяСуммаРасчетная
                                          ИЗ
                                              ФинальнаяТаблица КАК ФинальнаяТаблица
                                          ГДЕ
                                              ФинальнаяТаблица.Н2_СуммаРасчетная > 0
                                          
                                          СГРУППИРОВАТЬ ПО
                                              ФинальнаяТаблица.Н2_Сотрудник,
                                              ФинальнаяТаблица.Н2_Период) КАК ВложенныйЗапрос
                                          ПО ФинальнаяТаблица.Н2_Сотрудник = ВложенныйЗапрос.Сотрудник
                                   
                                  СГРУППИРОВАТЬ ПО
                                      ФинальнаяТаблица.Н2_Сотрудник


                                Все заработало.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0491 ]   [ 16 queries used ]   [ Generated: 29.06.22, 16:15 GMT ]