使用 TSQL 对简单聚合总计进行 UNPIVOT...这甚至可能吗?

Using TSQL to UNPIVOT simple aggregated totals...is this even possible?

我试图在将某些数据加载到 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 命令,但想不出正确的使用方法。

这有可能吗,还是我从错误的方向来解决这个问题?

你不需要做 UNPIVOT,你想要聚合:

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

如果汇总了以上数据,则可以将 subuqerycteapply 一起使用:

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]);