2

ここに非常に単純なテーブルがあります。


1ID
日付1 日付 2日付3



データを月とIDで要約して、クエリ結果が次のようになるようにします。


table1のクエリ結果
IDnullではない

からのDate1の月数
nullではない月からのDate2の数nullではない
月からのDate3の数


私は現在、@ monthが指定されているものに応じて、1か月だけプルするこのクエリを以下に示します。

Select ID, @month as [Month]  
Sum((Case When Month(Date1)=@month then 1 else 0 END)) as [Date1 Count],   
Sum((Case When Month(Date2)=@month then 1 else 0 END)) as [Date2 Count],  
Sum((Case When Month(Date3)=@month then 1 else 0 END)) as [Date3 Count],  
From Table1  
Group by ID 

しかし、 12か月すべてを取得したいのですが、データベースに月テーブルまたはカレンダーテーブルがありません。各IDの12か月すべてを含むクエリを作成し、Date1、Date2、およびDate3の対応する月数を取得するにはどうすればよいですか。 ?ところで、多くのエントリでは、日付の1つが空になっています。たとえば、Date1とDate3 = Nullであるのに対し、Date2 = '01/01/2008'です。前もって感謝します!

4

1 に答える 1

1

月は12か月しかなく、変更されることはないため、CTEまたはサブクエリを使用して月番号を生成するのは簡単です。

;with M as (
  select 1 as month union
  select 2 union
  select 3 union
  select 4 union
  select 5 union
  select 6 union
  select 7 union
  select 8 union
  select 9 union
  select 10 union
  select 11 union
  select 12
)
Select ID, M.Month,
Sum((Case When Month(Date1)=M.Month then 1 else 0 END)) as [Date1 Count],   
Sum((Case When Month(Date2)=M.Month then 1 else 0 END)) as [Date2 Count],  
Sum((Case When Month(Date3)=M.Month then 1 else 0 END)) as [Date3 Count]  
From M,Table1
Group by ID,M.month

デモ:http ://www.sqlfiddle.com/#!3/19ed6b/1

于 2012-10-31T21:31:13.447 に答える