我有以下内容:
http://sqlfiddle.com/#!6/226ae/1
我现在尝试在一年中的每个星期添加一行,并相应地过滤联系人.CONTACTS有一个datetime列.新表格如下:
Status 1 Status 2 Status 3
Week 1 3 4 2
Week 2 1 5 3
Week 3 2 2 4
Run Code Online (Sandbox Code Playgroud)
我认为需要使用DATEADD,但是我在如何开始更改查询方面感到茫然.
我知道MySQL有一个GROUP BY WEEK命令,但我不认为SQL有一个等价的.实现这一目标的最佳方法是什么?
Tar*_*ryn 32
如果DATEPART()数据跨越多年,您可以按周和年份使用此组:
SELECT
'Week ' + cast(datepart(wk, created) as varchar(2)) Week,
SUM(case WHEN status = 1 then 1 else 0 end) Status1,
SUM(case WHEN status = 2 then 1 else 0 end) Status2,
SUM(case WHEN status = 3 then 1 else 0 end) Status3,
SUM(case WHEN status = 4 then 1 else 0 end) Status4,
SUM(case WHEN status = 5 then 1 else 0 end) Status5
FROM contacts
group by datepart(wk, created), year(created)
Run Code Online (Sandbox Code Playgroud)
将年份添加到最终结果:
SELECT
'Week ' + cast(datepart(wk, created) as varchar(2)) Week,
year(created) year,
SUM(case WHEN status = 1 then 1 else 0 end) Status1,
SUM(case WHEN status = 2 then 1 else 0 end) Status2,
SUM(case WHEN status = 3 then 1 else 0 end) Status3,
SUM(case WHEN status = 4 then 1 else 0 end) Status4,
SUM(case WHEN status = 5 then 1 else 0 end) Status5
FROM contacts
group by datepart(wk, created), year(created)
Run Code Online (Sandbox Code Playgroud)