2

我在这里有一个非常简单的表:



1 ID
日期
1 日期 2
日期 3


我想按月份和ID汇总数据,所以查询结果如下:


查询table1
ID
月份的结果
Date1 非空月份的计数 Date2 非空
月份的计数 Date3 非空月份的
计数


我目前在下面有这个查询,根据@month 指定的内容仅拉一个月:

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 的相应月度计数? 顺便说一句,许多条目的日期之一为空,例如 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 回答