2012-01-06 107 views
1

目前,我有2個疑問:SQL聯接查詢援助

 
SELECT dateadd(month, x.MonthOffset,0) as [Month], SUM(x.itemcount) as [Total] FROM 
    (SELECT datediff(month,0, cna.impdate) as MonthOffset, count(*) as itemcount FROM myTable 
     WHERE (emergency = 'Emergency') AND (impdate BETWEEN '" + fromDate + "' AND '" + toDate + "') 
     GROUP BY impdate) x 
     GROUP BY MonthOffset ORDER BY MonthOffset asc 

SELECT dateadd(month, x.MonthOffset,0) as [Month], SUM(x.itemcount) as [Total] FROM 
    (SELECT datediff(month,0, cna.impdate) as MonthOffset, count(*) as itemcount FROM myTable 
     WHERE (impdate BETWEEN '" + fromDate + "' AND '" + toDate + "') 
     GROUP BY impdate) x 
     GROUP BY MonthOffset ORDER BY MonthOffset asc 

這將返回數據的2列與項目每月計數。

我的問題發生在存在一個月沒有緊急項目時。因爲我將對象傳遞給第二個查詢,如果從第一個檢索到的列數與第二個查詢不匹配,我將收到索引超出界限的錯誤。

如何將兩個查詢結合在一起,以便我可以有3列 - 月份,緊急總數和項目總數?緊急事件總數可以是0或null。

回答

4

我沒有測試它的一種方式,但我認爲這應該給你你在找什麼:

SELECT dateadd(month, datediff(month,0, cna.impdate),0) as [Month], 
     count(*) as itemcount, 
     SUM(CASE WHEN emergency = 'Emergency' THEN 1 ELSE 0 END) AS EmergencyCount 
FROM myTable 
WHERE impdate BETWEEN '" + fromDate + "' AND '" + toDate + "' 
GROUP BY dateadd(month, datediff(month,0, cna.impdate),0) 
ORDER BY [Month] asc 
+1

好的報價,它使得這兩個方面,多少是突發事件都在每一個行月。應該很簡單,讓yookd做他需要的任何東西... – DRapp 2012-01-06 20:25:37

+0

我不知道CASE表達式。謝謝你,這簡單而優雅。 – 2012-01-06 20:44:53