Агрегировать в CTE между скобками для использования в случае после - PullRequest
0 голосов
/ 31 марта 2020

У меня есть эта таблица (это раздел), которую я использую в качестве CTE для второй части запроса, включающей агрегаты и функции cube (). Во второй части запроса у меня есть условие case для счетчика event_id, где bsp находится между скобками диапазона.

╔═══════════╦════════╗
║  EVENT_ID ║ BSP    ║
╠═══════════╬════════╣
║ 146305074 ║ 3.61   ║
╠═══════════╬════════╣
║ 146305074 ║ 3.65   ║
╠═══════════╬════════╣
║ 146305074 ║ 4.00   ║
╠═══════════╬════════╣
║ 146305074 ║ 11.86  ║
╠═══════════╬════════╣
║ 146305074 ║ 20.79  ║
╠═══════════╬════════╣
║ 146305074 ║ 24.85  ║
╠═══════════╬════════╣
║ 146305074 ║ 35.83  ║
╠═══════════╬════════╣
║ 146305074 ║ 155.41 ║
╚═══════════╩════════╝

Во второй части запроса у меня есть условие case для count event_id, где bsp равно между некоторыми скобками диапазонов.

    CASE
                WHEN td.BSP <= 2    THEN '01-02'
                WHEN td.BSP <= 3    THEN '02-03'
                WHEN td.BSP <= 5    THEN '03-05'
                WHEN td.BSP <= 8    THEN '05-08'
                WHEN td.BSP <= 13   THEN '08-13'
                WHEN td.BSP <= 21   THEN '13-21'
                WHEN td.BSP <= 34   THEN '21-34'
                WHEN td.BSP <= 55   THEN '34-55'
                WHEN td.BSP <= 89   THEN '55-89'
                WHEN td.BSP <= 1000 THEN '89-1000'
    END

выше - диапазоны, в которых я должен сгруппировать BSP для каждого event_id, но я должен показать количество раз, когда это происходит, и классифицировать в соответствии с этим. например, с этими данными мой ожидаемый результат будет

a count of 3 for BSP <=5
a count of 1 for BSP <=13
a count of 1 for BSP <=21
a count of 1 for BSP <=34
a count of 1 for BSP <=1000

, но во второй части я хочу иметь случай, в котором я могу выбрать по этому количеству event_id и дать им значение на основе этого:

    CASE
        WHEN "count of event id" = 1    THEN '01'
        WHEN"count of event id" in (2,3)    THEN '02-03'
        WHEN "count of event id" >3 THEN '04-1000'
    END
        AS label

полная информация о запросах и тестовых данных находится в Fiddle , и просто для ясности в отношении этой конкретной ошибки, что должно произойти, это то, что столбец «Метка скобки» не должен • поместить все значения в скобку «04-1000» в соответствии с выбором в блоке «Price Bracket Count». но должен показывать количество раз, когда идентификатор события находился в скобке BSP.

1 Ответ

1 голос
/ 31 марта 2020

Если я правильно понимаю, вы можете определить группу и использовать group by:

SELECT v.grp, COUNT(*)
FROM td CROSS APPLY
     (values (CASE WHEN td.BSP <= 2    THEN '01-02'
                   WHEN td.BSP <= 3    THEN '02-03'
                   WHEN td.BSP <= 5    THEN '03-05'
                   WHEN td.BSP <= 8    THEN '05-08'
                   WHEN td.BSP <= 13   THEN '08-13'
                   WHEN td.BSP <= 21   THEN '13-21'
                   WHEN td.BSP <= 34   THEN '21-34'
                   WHEN td.BSP <= 55   THEN '34-55'
                   WHEN td.BSP <= 89   THEN '55-89'
                   WHEN td.BSP <= 1000 THEN '89-1000'
              END)
     ) v(grp)
GROUP BY grp
ORDER BY MIN(td.BSP);
...