sql-server - 选择计算中的列,但我不希望它出现在组中

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

我有一个查询,如果其他两列上的 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 分组。

最佳答案

未封装在聚合函数中的表达式必须包含在 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

关于sql-server - 选择计算中的列,但我不希望它出现在组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42193347/

相关文章:

sql-server - 如何创建引用复合主键中一列的外键

c# group by 不起作用

mysql - 按时间对平均气温进行分组

sql - <> 和 != 之间的区别

sql - 返回没有匹配条目的所有日期

sql - 在 INNER JOIN 中选择 TOP

c# - 通过从组合框中选择不同的表,在 sql db 中插入新值

sql-server-2008 - 如何在多对多映射表中有效地创建数据的逻辑子集?

sql-server-2008 - 从使用 Windows 身份验证的网络共享批量插入 SQL Server 需要什么权限?

MySQL - 获取 sum() grouped max() of group