使用 TSQL 对简单的汇总总计进行 UNPIVOT……这甚至可能吗?

Posted

技术标签:

【中文标题】使用 TSQL 对简单的汇总总计进行 UNPIVOT……这甚至可能吗?【英文标题】:Using TSQL to UNPIVOT simple aggregated totals...is this even possible? 【发布时间】:2019-03-27 14:10:15 【问题描述】:

我试图在将某些数据加载到 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】:

你不需要做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]);

【讨论】:

哇...我是个白痴,如果我能让你用数字方式打我的脸,我会的。再次感谢让我成为 *** dummy。我很感激 Yogesh!

以上是关于使用 TSQL 对简单的汇总总计进行 UNPIVOT……这甚至可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL SEVER分类汇总后如何让小计和总计放到下面

如何按前 N 个类别与“所有其他”和总计进行汇总?

汇总以仅保留总计并删除小计

TSQL PIVOT/UNPIVOT 多个汇总列

多个 TSQL 行中的多个重叠日期需要减少为汇总行

快速取消数据透视表的分类汇总行和总计行