【问题标题】:SQL server pivot + sum + group bySQL Server 数据透视 + 总和 + 分组依据
【发布时间】: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 

【问题讨论】:

    标签: sql sql-server sum pivot aggregate-functions


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-19
        • 1970-01-01
        • 2014-11-22
        • 2012-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多