Select 计算中的列,但我不希望它出现在组中

Column in Select calculation but I don't want it in the group

我有一个查询,如果其他两个列上的 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 试试这个:

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

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