2012-01-17 1 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チャートで以下のデータを生成します。

しかし、グラフには、毎月すべての販売者のデータが必要です。それ以外の場合は、競合します。

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

どれ提案:私たちは、次のように必要なすべての商人を別のテーブルtbl_Merchantリストを持つことができます

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 

したがって、次のように、結果を行うためのSQLのための方法があります歓迎されます。

ありがとうございました。

答えて

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が特に大きい場合は、mthインラインビューにSalesデータから必要な月を選択するのではなく、CTEで生成された再帰的なリストの月の必要な範囲を入力する方が早いかもしれません。

関連する問題