选择计算中的列,但我不希望它在组中

时间:2017-02-12 21:17:19

标签: 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进行分组。

2 个答案:

答案 0 :(得分:1)

你需要将你的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

答案 1 :(得分: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