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

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

Высказать своё мнение о модераторах раздела можно здесь: 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 Кбайт, скачиваний: 63)

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

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

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

                      Где я допустил ошибку?
                        Походу это СКД что-то оптимизирует. Как это х-ню отключить?
                          Цитата ^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_Сотрудник


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


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0437 ]   [ 17 queries used ]   [ Generated: 9.12.24, 14:15 GMT ]