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

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

Высказать своё мнение о модераторах раздела можно здесь: evGenius
  
> Группировка в СКД по диапазонам чисел.
    Есть возможность в СКД группировать по диапазонам? Есть колонка с числа, требуют группировать на 3 группы - 0-1000, 1001-10000, 10001-20000. Пока придумал что можно делать вычисляемое поле и вычислять если число 0-1000 писать 1, 1001-10000 - 2, 10001-20000-3 и группировать по этому вычисляемому полю. Но хотят ещё и диапазоны задавать вручную на форме отчета. Как быть? :wacko:
      Цитата ^D^ima @
      Но хотят ещё и диапазоны задавать вручную на форме отчета. Как быть?

      А как будут задавать данные диапазоны? Пользователи они такие - за ними глаз да глаз нужен. Необходимо чтобы диапазоны не пересекались и в то же время перекрывали все варианты, ну или же в случае если значение выходит за границы дозволенного, формировать отдельную группу - "Прочее".
      Как вариант можно перед компоновкой данных сформировать таблицу значений по диапазонам, с 3 колонками:
      ИмяГруппировкиЛевоеЗначениеПравоеЗначение
      0-100001000
      1001-10000100110000
      10001-200001000120000


      Далее эту ТЗ поместить в параметр запроса и в конце связать по значению.
      Допустим в запросе во временной таблице ИсходныеДанные у нас уже выбраны нужные данные, а во временной таблице ТЗ находятся наши диапазоны, то тогда получается как-то так:
      ExpandedWrap disabled
        ВЫБРАТЬ
            ИсходныеДанные.Число КАК Число,
            ЕСТЬNULL(ТЗ.ИмяГруппировки, "Прочее") КАК ИмяГруппировки
        ИЗ
            ИсходныеДанные КАК ИсходныеДанные
                ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
                ПО ИсходныеДанные.Число >= ТЗ.ЛевоеЗначение
                    И ИсходныеДанные.Число <= ТЗ.ПравоеЗначение
         
        УПОРЯДОЧИТЬ ПО
            Число


      Ну и как итог - группируйте по полю - ИмяГруппировки
      Сообщение отредактировано: LostAngel -
        Для примера можно вот такой запрос в консольке выполнить:
        ExpandedWrap disabled
          ВЫБРАТЬ
              "0-1000" КАК ИмяГруппировки,
              0 КАК ЛевоеЗначение,
              1000 КАК ПравоеЗначение
          ПОМЕСТИТЬ ТЗ
           
          ОБЪЕДИНИТЬ ВСЕ
           
          ВЫБРАТЬ
              "1001-10000",
              1001,
              10000
           
          ОБЪЕДИНИТЬ ВСЕ
           
          ВЫБРАТЬ
              "10001-20000",
              10001,
              20000
          ;
           
          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              0 КАК Число
          ПОМЕСТИТЬ Числа_0_1
           
          ОБЪЕДИНИТЬ ВСЕ
           
          ВЫБРАТЬ
              1
          ;
           
          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              Старший.Число * 2 + Младший.Число КАК Число
          ПОМЕСТИТЬ Числа_0_3
          ИЗ
              Числа_0_1 КАК Младший,
              Числа_0_1 КАК Старший
          ;
           
          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              Старший.Число * 4 + Младший.Число КАК Число
          ПОМЕСТИТЬ Числа_00_15
          ИЗ
              Числа_0_3 КАК Младший,
              Числа_0_3 КАК Старший
          ;
           
          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              Старший.Число * 16 + Младший.Число КАК Число
          ПОМЕСТИТЬ Числа_000_255
          ИЗ
              Числа_00_15 КАК Младший,
              Числа_00_15 КАК Старший
          ;
           
          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              Старший.Число * 256 + Младший.Число КАК Число
          ПОМЕСТИТЬ ИсходныеДанные
          ИЗ
              Числа_000_255 КАК Младший,
              Числа_000_255 КАК Старший
          ;
           
          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ИсходныеДанные.Число КАК Число,
              ЕСТЬNULL(ТЗ.ИмяГруппировки, "Прочее") КАК ИмяГруппировки
          ИЗ
              ИсходныеДанные КАК ИсходныеДанные
                  ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
                  ПО ИсходныеДанные.Число >= ТЗ.ЛевоеЗначение
                      И ИсходныеДанные.Число <= ТЗ.ПравоеЗначение
           
          УПОРЯДОЧИТЬ ПО
              Число
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0211 ]   [ 15 queries used ]   [ Generated: 11.12.24, 18:23 GMT ]