按预定义日期范围进行 SQL 分组

标签 sql sql-server t-sql

我有以下内容:

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/

相关文章:

sql-server - 如何在没有文件的情况下备份启用大文件流的数据库

sql - 在当前事务之外提交事务(如 Oracle 中的自治事务)

sql-server - 如何删除**IN**查询Sql中的冗余条件

mysql - 在其他表中选择最低值的最快方法

mysql - 在存储过程中使用变量作为字符串

使用 NOT EXISTS 的 SQL

mysql - 如何使用存储过程从多个数据输入返回两个日期之间的数据

mysql - sql server中mysql的from_days()相当于什么?

sql - 如何将语法从 SQL Server 转换为 Postgresql?

c# - 不执行查询的 SqlDependency