2010-05-10 79 views
2

我試圖創建一個報告,顯示每年的每個月銷售的商品數量。如何在報告服務的列組中添加「缺失」列?

我有一個返回每月銷售貨物清單查詢時,它看起來是這樣的:

SELECT Seller.FirstName, Seller.LastName, SellingHistory.Month, SUM(SellingHistory.QuantitySold) 
FROM SellingHistory JOIN Seller on SellingHistory.SellerId = Seller.SellerId 
WHERE SellingHistory.Year = @Year 
GOUP BY Seller.FirstName, Seller.LastName, SellingHistory.Month 

我想要做的是顯示有一欄爲每個月+一個報告將爲每個賣方顯示在選定月份內銷售的數量。

Seller Name | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Total 

我管理使用矩陣列組(上月組)以顯示現有數據列,如果我從月份數據至3月,它會顯示3分第一列做,總數。我想要做的是始終顯示所有列。

我想通過在SQL請求中添加缺失的月份來做到這一點,但我覺得有點奇怪,我確信必須有一些「最乾淨的」解決方案,因爲這是必須相當頻繁的事情。

謝謝。

PS:我使用的SQL Server Express 2008

回答

3
SELECT Seller.Id, 
SUM(CASE WHEN SellingHistory.Month = 'Jan' THEN SellingHistory.QuantitySold END) AS Jan, 
SUM(CASE WHEN SellingHistory.Month = 'Feb' THEN SellingHistory.QuantitySold END) AS Feb, 
... 
GROUP BY Seller.Id 

您還可以使用PIVOT(仔細檢查語法,我想下面的查詢是好的,但我還沒有和處理SQL工作了一會兒):

SELECT Seller.Id, Jan, Feb, ... 
FROM ... 
PIVOT (SUM(SellingHistory.QuantitySold) FOR SellingHistory.Month IN (
    [Jan],[Feb],....)) AS t; 
+0

好吧,所以唯一的方法是通過SQL來做到這一點?我認爲這可以直接在報告中完成。 – Gimly 2010-05-11 06:20:56

2

要在T-SQL做到這一點,你需要一個PIVOT,有使用幾個月下來中間的here頁面的例子。