CREATE TABLE [test] (
[id] [bigint] IDENTITY (1, 1) NOT NULL ,
[Cdatetime] [datetime] NULL ,
[Cnum] [int] NULL ,
) ON [PRIMARY]
insert into test
select '2012-12-27',1 union all
select '2013-01-01',2 union all
select '2013-02-01',3 union all
select '2013-03-01', 4 union all
select '2013-04-01', 5 union all
select '2013-05-01', 6
GO现在对测试数据进行按月份统计,统计条件:上月22号到本月23号为一个月(2012-12-27属于2013年1月范围,依此类推)
想得到这样的结果 月份 数量
1月份 3
2月份 3
3月份 4
4月份 5
5月份 6SQLselect测试统计
CONVERT(VARCHAR, MONTH(CASE WHEN DAY(cdatetime) > 23
THEN DATEADD(mm, 1, cdatetime)
ELSE cdatetime
END)) + '月' AS 月份 ,
SUM(cnum) AS 数量
FROM dbo.TEST
GROUP BY YEAR(cdatetime) ,
CONVERT(VARCHAR, MONTH(CASE WHEN DAY(cdatetime) > 23
THEN DATEADD(mm, 1, cdatetime)
ELSE cdatetime
END)) + '月'
/*年 月份 数量
2012 1月 1
2013 1月 2
2013 2月 3
2013 3月 4
2013 4月 5
2013 5月 6*/
CONVERT(VARCHAR, MONTH(CASE WHEN DAY(cdatetime) > 23
THEN DATEADD(mm, 1, cdatetime)
ELSE cdatetime
END)) + '月份' AS 月份 ,
SUM(cnum) AS 数量
FROM dbo.TEST
GROUP BY
CONVERT(VARCHAR, MONTH(CASE WHEN DAY(cdatetime) > 23
THEN DATEADD(mm, 1, cdatetime)
ELSE cdatetime
END))
/*月份 数量
1月份 3
2月份 3
3月份 4
4月份 5
5月份 6*/