SQL按预定义的日期范围分组

时间:2012-11-07 20:27:58

标签: sql sql-server tsql

我有以下内容:

http://sqlfiddle.com/#!2/fca3d/1

我现在尝试在一年中每周添加一行,并相应地过滤联系人。新表格如下:

        Status 1    Status 2    Status 3
Week 1      3          4           2
Week 2      1          5           3
Week 3      2          2           4

我认为需要使用DATEADD,但是我在如何开始更改查询方面感到茫然。任何帮助将非常感激!

1 个答案:

答案 0 :(得分:2)

只需添加GROUP BY子句:

SELECT 
    WEEK(created),
    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 WEEK(created), YEAR(created);

按年分组也很重要,否则无论年份如何,它都会按周分组 此外,如果一周内没有数据,则不会创建任何行。你需要另一组数据。

修改:以下是SQL Server 2012 [SQLFiddle]

的示例