【问题标题】:Convert rows to columns and sum with group by将行转换为列并使用 group by 求和
【发布时间】:2021-07-08 04:10:25
【问题描述】:

我有一个包含 IDWorkingDateAmountReceived 列的表格,其中数据显示为

ID    WorkingDate     AmountReceived
-------------------------------------
1     13/April/2021   201999.01 
2     14/Arpil/2021     1099.02

现在,我想把它展示出来

13/April/2021      14/April/2021    15/April/2021      
--------------------------------------------------
201999.01          1099.02          102.09

我试过了

select AmountReceived, WorkingDate
from Orders o

select distinct o.WorkingDate, sum(AmountReceived) over (partition by WorkingDate) as total 
from Orders o
group by WorkingDate, AmountReceived

但它会引发聚合错误。

【问题讨论】:

  • 错误信息是什么?
  • 15/Apr/2021102.09 来自哪里?
  • @Squirrel 我已经编辑了查询并且错误消失了。这是一个分组问题。但它仍然是在行中,而不是在列 f
  • 来自表 Orders

标签: sql sql-server tsql sql-server-2008 stored-procedures


【解决方案1】:

使用PIVOT操作符,你可以实现你想要的

 select *
 from
 (
    select o.WorkingDate, o.AmountReceived
    from   Orders o
 ) o
 pivot
 (
     sum(AmountReceived)
     for WorkingDate in ([2021-04-13], [2021-04-14], [2021-04-15])
 ) p

【讨论】:

  • Msg 102, Level 15, State 1, Line 3 '(' 附近的语法错误。消息 102,级别 15,状态 1,第 6 行 ')' 附近的语法错误
  • 但是工作日期好像不是固定的,它可以是表格中的任何东西。我的意思是任何日期
  • 修正了错字。至于日期,如果不固定,则需要使用动态sql
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多