Результаты сервера Pivot SQL - PullRequest
2 голосов
/ 17 января 2020

Мой набор результатов выглядит следующим образом:

ICount   Owners ProgramCount 
1344     AA     1 
408      AA     2 
185      AA     3 
87       AA     4 
54       AA     5 
644      EA     1 
81       EA     2 
18       EA     3 
3        EA     4 
2        EA     5 
4419     JA     1 
1461     JA     2 
700      JA     3  
375      JA     4 
209      JA     5 

, и я хотел бы, чтобы результаты были:

Owner Total  ProgramCount 1 ProgramCount 2 ProgramCount 3 ProgramCount 4 ProgramCount 5 
AA    2078   1344           408            185            87             54 
EA    748    644            81             18             3              2 
JA    7164   4419           1461           700            375            209 

, где столбец Total - это сумма ProgramCount с 1 по 5.

Как бы я построил свой SQL, чтобы выполнить sh это?

Ответы [ 3 ]

3 голосов
/ 17 января 2020
select  v.Owners                                                    as  Owners,
        sum(v.ICount)                                               as  Total,
        sum(case when v.ProgramCount = 1 then v.ICount else 0 end)  as  ProgramCount1,
        sum(case when v.ProgramCount = 2 then v.ICount else 0 end)  as  ProgramCount2,
        sum(case when v.ProgramCount = 3 then v.ICount else 0 end)  as  ProgramCount3,
        sum(case when v.ProgramCount = 4 then v.ICount else 0 end)  as  ProgramCount4,
        sum(case when v.ProgramCount = 5 then v.ICount else 0 end)  as  ProgramCount5
from    (
            QUERY_WITH_YOUR_RESULT_SET
        ) as v(ICount, Owners, ProgramCount)
group by v.Owners
3 голосов
/ 17 января 2020

Простой поворот с суммой () над ()

Пример

Select *
 From  ( 
        Select [Owners]
              ,Item = concat('Program Count ',[ProgramCount])
              ,[ICount]
              ,[Total] = sum([ICount]) over(partition by [Owners])
         from YourTable
        ) src
 Pivot (sum([ICount]) for [Item] in ([Program Count 1],[Program Count 2],[Program Count 3],[Program Count 4],[Program Count 5]) ) pvt
 Order By [Owners]

Возвращает

enter image description here

0 голосов
/ 18 января 2020

Согласно ответу @ Максима Золотенко, Вы можете использовать Запрос условной агрегации с группой на , как показано ниже

SELECT Owners,
       SUM(ICount) AS Total,
       SUM(CASE WHEN  ProgramCount = 1 THEN ICount ELSE 0 END) AS ProgramCount_1,
       SUM(CASE WHEN  ProgramCount = 2 THEN ICount ELSE 0 END) AS ProgramCount_2,
       SUM(CASE WHEN  ProgramCount = 3 THEN ICount ELSE 0 END) AS ProgramCount_3,
       SUM(CASE WHEN  ProgramCount = 4 THEN ICount ELSE 0 END) AS ProgramCount_4,
       SUM(CASE WHEN  ProgramCount = 5 THEN ICount ELSE 0 END) AS ProgramCount_5
FROM TempTable
GROUP BY Owners

Демонстрация в реальном времени на db <> fiddle

Выход

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...