2017-02-12 38 views
2

我有一個查詢,如果其他兩列的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)<30 then col2 else 0 end)' – ZLK

+0

您可以添加表結構並指定主鍵以及一些示例數據嗎? – andrews

回答

1

表達式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://stackoverflow.com/tour)。如果沒有給我們一個反饋 – Hadi

1

您需要將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

相關問題