我有以下内容:
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,但是我不知道如何开始更改查询。任何帮助将非常感激!
最佳答案
只需添加一个 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 ]
关于按预定义日期范围进行 SQL 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13277646/