SQL Server 数据透视 + 总和 + 分组依据
Posted
技术标签:
【中文标题】SQL Server 数据透视 + 总和 + 分组依据【英文标题】:SQL server pivot + sum + group by 【发布时间】:2021-03-28 01:30:57 【问题描述】:我有以下数据,我需要对 sum pivot 进行分组
AA | BB | date |
---|---|---|
a | 1 | 01/01/2020 |
a | 2 | 01/01/2020 |
b | 5 | 01/01/2020 |
b | 1 | 01/01/2020 |
c | 5 | 01/01/2020 |
d | 1 | 01/01/2020 |
d | 8 | 02/01/2020 |
e | 1 | 01/01/2020 |
我用我的 sql 代码得到的东西
a | b | c | d | e | |
---|---|---|---|---|---|
01/01/2020 | 3 | 6 | 5 | 1 | 1 |
02/01/2020 | / | / | / | 8 | / |
我需要得到:a 和 d 分组为 f 和 c 和 e 分组为 g 和 b 分开
b | f | g | |
---|---|---|---|
01/01/2020 | 6 | 4 | 6 |
02/01/2020 | / | 8 | / |
我有以下 sql,但我似乎无法进行分组求和。你是在旋转之前还是之后?
SELECT * FROM(
SELECT AA,Date
FROM [dbo].[Data] )
AS SourceTable
PIVOT(SUM([BB])
FOR [AA] IN([a],[b],[c],[d],[e]))
AS PivotTable
如果我尝试这个它不起作用
SELECT * FROM(
SELECT AA,Date
FROM [dbo].[Data] )
AS SourceTable
PIVOT(SUM([BB])
FOR [AA] IN([a]+[d],[b],[c]+[e]))
AS PivotTable
【问题讨论】:
【参考方案1】:使用条件聚合如下:
select sum(case when aa in ('a','d') then BB end) as f,
sum(case when aa in ('c','e') then BB end) as g,
sum(case when aa = 'b' then BB end) as b
from table_name
group by date
【讨论】:
【参考方案2】:我发现使用条件聚合更简单:
select
date,
sum(case when d.aa = 'b' then bb else 0 end) as b,
sum(case when d.aa in ('a', 'd') then bb else 0 end) as f,
sum(case when d.aa in ('c', 'e') then bb else 0 end) as g
from data d
group by date
【讨论】:
以上是关于SQL Server 数据透视 + 总和 + 分组依据的主要内容,如果未能解决你的问题,请参考以下文章