2012-01-17 94 views
0

問候一切。SQL Server:生成空行?

我有一個SQL Server 2008 Express的數據庫的表中調用tbl_Sales,類似如下:

Merchant | Sales | Month 
Comp.1  100  201101 
Comp.1  200  201102 
Comp.2  130  201102 
Comp.1  250  201103 
Comp.2  130  201103 
Comp.3  240  201103 
      . 
      . 
      . 
Comp.3  340  201111 
Comp.2  240  201112 
Comp.3  140  201112 

我想產生MVC3圖表下面的數據。

但是圖表需要所有商家的數據每隔幾個月就會發生衝突。

那麼,有沒有對SQL的方式做的結果如下:

Merchant | Sales | Month 
Comp.1  100  201101 
Comp.2  0  201101 
Comp.3  0  201101 
Comp.1  200  201102 
Comp.2  130  201102 
Comp.3  0  201102 
Comp.1  250  201103 
Comp.2  130  201103 
Comp.3  240  201103 
      . 
      . 
      . 
Comp.3  340  201111 
Comp.1  0  201112 
Comp.2  240  201112 
Comp.3  140  201112 

,我們可以再來表tbl_Merchant列表出來,我們需要如下的所有商家:

Merchant 
Comp.1 
Comp.2 
Comp.3 
    . 
    . 
    . 
Comp.10 

任何建議將受到歡迎。

非常感謝。

回答

2

是 - 做招商的笛卡兒連接到要報告(讓你得到每一個商戶每個月行),然後左連接到您的數據表月 - 就像這樣:

select mth.[Month], mct.Merchant, coalesce(s.Sales,0) Sales 
from (select distinct [Month] from tbl_Sales) mth 
cross join Merchant mct 
left join tbl_Sales s 
     on mth.[Month] = s.[Month] and mct.Merchant = s.Merchant 

(如果tbl_Sales特別大,從遞歸的CTE生成的月份列表中填充mth內聯視圖所需的月份範圍可能會更快,而不是從銷售數據中選擇必要的月份集合。)