我有一个查询,如果其他两列上的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
我不想按Col3
或Col4
进行分组。
答案 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],
将解决问题