2

我有以下内容:

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,但是我不知道如何开始更改我的查询。任何帮助将非常感激!

4

1 回答 1

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 ]的示例

于 2012-11-07T20:33:16.390 回答