我在这里有一个非常简单的表:
表1
ID
日期1
DATE2
Date3
我想按月和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'。提前谢谢!
答案 0 :(得分: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