Использование TSQL для UNPIVOT простых агрегированных итогов ... это вообще возможно? - PullRequest
0 голосов
/ 27 марта 2019

Я пытался выполнить простое отключение некоторых данных перед их загрузкой в ​​Microsoft PowerBI.Поскольку в отчете PowerBI должен использоваться DirectQuery, использование «Unpivot» в редакторе запросов невозможно.Таким образом, казалось, что это может быть сделано в исходном SQL, который загружается.

select
     sum(case when cw.State = 'WORK' then 1 else null end) [Work]
    ,sum(case when cw.State = 'OUT' then 1 else null end)  [Out]
    ,sum(case when cw.State = 'POST' then 1 else null end) [Post]
from CurrentWork cw

Этот код выводит:

Work  Out  Post
----  ---  ----
  5    3    21

Но я бы хотел, чтобы вывод отображался следующим образом:

Event  Amount
-----  ------
Work   5
Out    3
Post   21

Я считаю, что мне нужно использовать команду UNPIVOT TSQL, но я не могу найти правильный способ ее использования.

Возможно ли это вообще, или я подхожу к этой проблеме изнеправильное направление?

1 Ответ

3 голосов
/ 27 марта 2019

Вам не нужно делать UNPIVOT, вам нужна агрегация:

select status, count(*)
from CurrentWork 
group by status;

Если вышеприведенные данные агрегированы, вы можете использовать subuqery или cte с apply:

with t as (
     select sum(case when cw.State = 'WORK' then 1 else null end) [Work]
            sum(case when cw.State = 'OUT' then 1 else null end)  [Out]
            sum(case when cw.State = 'POST' then 1 else null end) [Post]
     from CurrentWork cw
)
select tt.Event, tt.[Amount]
from t cross apply
     ( values ([Work], [Amount]), ([Out], [Amount]), ([Post], [Amount]) 
     ) tt(Event, [Amount]);
...