SQL 服务器数据透视 + 求和 + 分组依据
SQL server pivot + sum + group by
我有如下数据,我需要对总和枢轴进行分组
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
我发现使用条件聚合更简单:
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
按如下方式使用条件聚合:
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
我有如下数据,我需要对总和枢轴进行分组
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
我发现使用条件聚合更简单:
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
按如下方式使用条件聚合:
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