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

问题描述:

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

+0

你熟悉公用表表达式?没有看到底层数据是如何构建的,我认为这将是您的最佳选择。你能提供一些关于数据的细节吗? –

+2

'sum(case when datediff(dd,col3,col4) ZLK

+0

您可以添加表结构并指定主键以及一些示例数据吗? – andrews

表达式SQL语句

结束时使用以下逻辑

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

+0

谢谢。 MSDN文章也很有帮助。 – user2588110

+0

我的问题已解决,您有[接受答案](http://*.com/tour)。如果没有给我们一个反馈 – Hadi

您需要将Case..when 之外将您的SUM()试试这个:未在聚合函数中封装必须包含在GROUP BY子句中

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 
+0

谢谢。不知道我在想什么。 – user2588110