sql-server - sql server中的条件分组?

标签 sql-server tsql sql-server-2005

我有一个简单的查询:

SELECT YEAR(P.DateCreated)
      ,MONTH(P.DateCreated)
      ,COUNT(*) AS cnt
FROM   tbl1,
       tbl2....
GROUP BY
         MONTH(P.DateCreated)
        ,YEAR(P.DateCreated)

这将发出:

enter image description here

现在我需要相同的查询,但每年进行分组:

所以:

SELECT YEAR(P.DateCreated)

      ,COUNT(*) AS cnt
FROM   tbl1,
       tbl2....
GROUP BY
         YEAR(P.DateCreated)

不想想要进行 2 个查询。

有什么办法可以在这里进行条件group by吗?

我可以一个被另一个替换,但我不能一个被两个替换...

GROUP BY
     CASE WHEN @timeMode='y' THEN YEAR(P.DateCreated)
          WHEN @timeMode='m' THEN MONTH(P.DateCreated), YEAR(P.DateCreated) end

enter image description here

有什么帮助吗?

最佳答案

您最好使用两个单独的查询,但可以这样做

GROUP BY YEAR(P.DateCreated),
       CASE 
          WHEN @timeMode='m' THEN MONTH(P.DateCreated) end

WHEN @timeMode <> 'm'第二个GROUP BY表达式将是 NULL对于所有行并且不影响结果。

关于sql-server - sql server中的条件分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177316/

相关文章:

sql - 仅创建过程权限

c# - 选择相对于 sql 中其他列值多出 50% 的列值

sql - 按 A 列分组但比较 B 列

sql - 将 sql 结果集聚合为 HashBytes 值

sql - 查询以在一天的两个时间之间进行选择

sql - 如何复制 SQL 表中的记录但交换新行的唯一 id?

php - 将 2 个 SQL 查询合并为一个 - 显示总销售额和净销售额

java - 将我的 Java 应用程序连接到 SQL Server 2012

sql - 哪个更好 : Bookmark/Key Lookup or Index Seek

sql - 选择列表中的列无效,因为它未包含在聚合函数或 GROUP BY 子句中