Как запросить таблицу в SQL, чтобы получить результат, в котором имена столбцов располагаются вертикально в зависимости от условия? - PullRequest
0 голосов
/ 28 мая 2019

Предположим, у меня есть таблица SQL под названием Users со следующими данными примера:

Description          Days
--------------------------
Healthy               10
High-blood pressure   20          
Cholesterol           23 
Diabetes              31
High-blood pressure   8
Healthy               12
Diabetes              18              
Cholesterol           25
High-blood pressure   20
Healthy               6

Как мне получить результат, который выглядит следующим образом, где столбцы: Less_than_20_days, 20_days и Greater_than_20_days содержат значения из таблицы выше

Description         Less_than_20_days         20_days         Greater_than_20_days
-----------------------------------------------------------------------------------
Healthy                    3                     0                     0
High-blood pressure        1                     2                     0
Cholesterol                0                     0                     2
Diabetes                   1                     0                     1

Я пытаюсь заставить это работать в SQL Server и пытался использовать оператор объединения, временные таблицы и ctes, но я не могу получить желаемый результат.

Любая помощь будет высоко ценится!

Ответы [ 2 ]

4 голосов
/ 28 мая 2019

Вы можете объединить case с sum():

select
     [Description]
    ,sum(case when [Days] < 20 then 1 else 0 end) as Less_than_20_days
    ,sum(case when [Days] = 20 then 1 else 0 end) as d20_days
    ,sum(case when [Days] > 20 then 1 else 0 end) as Greater_than_20_days
from users
group by [Description]
1 голос
/ 28 мая 2019

Использовать условную агрегацию:

select description,
       sum(case when days < 20 then 1 else 0 end) as num_lt_20,
       sum(case when days = 20 then 1 else 0 end) as num_eq_20,
       sum(case when days > 20 then 1 else 0 end) as num_gt_20
from t
group by description
...