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
我不想按 Col3
或 Col4
分组。
您需要将 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
我有一个查询,如果其他两个列上的 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
分组。
您需要将 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