使用SQL进行GROUP BY WEEK

Rob*_*ous 12 sql t-sql

我有以下内容:

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)

请参阅SQL Fiddle with Demo

将年份添加到最终结果:

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)

请参阅SQL Fiddle with demo