【问题标题】:Column in Select calculation but I don't want it in the group选择计算中的列,但我不希望它在组中
【发布时间】:2017-02-12 21:17:18
【问题描述】:

如果其他两列上的datediff 小于一个值,我有一个查询,它对一列求和,但我不想按计算中的列分组。有人能告诉我最好的方法吗?我想到了嵌套查询或使用数据透视,但都没有给出我想要的。这是sql:

SELECT 
    Col7, 
    Col8, 
    Case when datediff (dd,col3,col4) < 30 then Sum(Col2) ELSE 0 END as [30days], 
    Case when datediff (dd,col3,col4) < 60 then Sum(Col2) ELSE 0 END as [60days] 
FROM Table 
Group BY 
    Col7, Col8

我不想按Col3Col4 分组。

【问题讨论】:

  • 您熟悉常用的表表达式吗?在不了解基础数据的结构的情况下,我认为这将是您的最佳选择。你能提供一些关于数据的细节吗?
  • sum(case when datediff(dd,col3,col4) &lt; 30 then col2 else 0 end)
  • 能否添加表结构并指定主键以及一些示例数据?

标签: sql-server sql-server-2008 group-by pivot


【解决方案1】:

未封装在聚合函数中的表达式必须包含在 SQL 语句末尾的 GROUP BY 子句中

当使用以下逻辑时

Case when datediff (dd,col3,col4) < 30 then Sum(Col2) ELSE 0 END as [30days], 

这不被视为 Col7 和 Col8 可以分组的聚合函数。用

替换此逻辑
SUM(Case when datediff (dd,col3,col4) < 30 then Col2 ELSE 0 END) as [30days],

解决问题

阅读更多Group by MSDN artcle

【讨论】:

  • 谢谢。 MSDN 文章也很有帮助。
  • 我你的问题已经解决了你有accept an answer。如果没有,请给我们反馈
【解决方案2】:

您需要将 SUM() 移出 Case..when 试试这个:

SELECT 
    Col7, 
    Col8, 
    SUM(Case when datediff (dd,col3,col4) < 30 then Col2 ELSE 0 END) as [30days], 
    SUM(Case when datediff (dd,col3,col4) < 60 then Col2 ELSE 0 END) as [60days] 
FROM Table 
Group BY 
    Col7, Col8

【讨论】:

  • 谢谢。不知道我在想什么。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多