2011-01-16 15 views
1

2つの列にグループ化されたカウントを取得する必要があるテーブルがあります。左外部結合を使用して同じテーブルでカウントするSQLクエリ

テーブルは、2つの列1 datetimeの列があり、もう一つは、私が探していますどのような成功値(-1,1,0) である。このようなものである:各月の成功値の

数:

月----成功-----
11カウント------- ------- -1 50

11 ------- 1 - -------- 50

11 ------- 0 ------- 50

12 ------- -1 ------- 50

12-- ----- 1 ------- 50

12 ------- 0 ------- 50

月には成功値が存在しない場合カウントはnullまたはゼロでなければなりません。 私は左外部結合も試みましたが、使用しないとカウントが正しくありません。

答えて

1

あなたは、あなたが同様に欠けヶ月が必要な場合は、実際のデータ

select m.month, s.success, COUNT(t.month) 
from (select distinct MONTH from tbl) m 
cross join (select -1 success union all select 1 union all select 0) s 
left join tbl t on t.month = m.month and t.success = s.success 
group by m.month, s.success 

に接合されたままにしておくことができ、仮想行列を構築するために3つの成功値に対して、すべての利用可能なカ月間参加交差する必要があり、上記のサブクエリ "m"を変更することで、やや複雑になります。

@更新日 カウント(*)は、左結合に対して常に1以上を返します。左側の結合の右側の部分のcount(colname)が正しいことを確認します。

+0

こんにちは、クエリの行の数を期待どおりに返しますが、特定の月のカウントは1として返されます。それは0にする必要があります:( – Sasi

+0

私に正しい結果を与えました。 – Sasi

0

1から12までの値を持つテーブルが必要な場合があります。参加するには、ゼロカウントを取得する必要があります。

関連する問題