sql - 在查询末尾插入 ROW,其中包含 SUM 列的总计

标签 sql sql-server sql-server-2008 tsql

我当前有一个查询,该查询汇总一组值并按日期对它们进行分组。结果看起来像这样:

Date        Item2   Item2   Item3   Item4   Item5
2013-05-31  1       30      0       0       129
2013-06-03  0       90      0       15      78
2013-06-04  0       50      0       1       124
2013-06-05  0       100     0       17      58
2013-06-06  0       24      0       0       105
2013-06-07  0       50      0       1       83
2013-06-10  0       45      2       42      64
2013-06-11  3       43      0       14      90
2013-06-12  2       44      0       36      88
2013-06-13  1       34      0       15      92

我用来检索结果的查询看起来像这样

SELECT CONVERT(NVARCHAR(10), TheDate, 120) 'Date',  
            (SUM(CASE WHEN itemID = 1 THEN 1 ELSE 0 END)) AS Item1,
            (SUM(CASE WHEN itemID = 2 THEN 1 ELSE 0 END)) AS Item2,
            (SUM(CASE WHEN itemID = 3 THEN 1 ELSE 0 END)) AS Item3,
            (SUM(CASE WHEN itemID = 4 THEN 1 ELSE 0 END)) AS Item4,
            (SUM(CASE WHEN itemID = 5 THEN 1 ELSE 0 END)) AS Item5
FROM         Table1 AS a INNER JOIN
                      Table2 AS tab2 ON tab2.Table1ID = a.Table1ID LEFT OUTER JOIN
                      Table3 AS tab3 ON tab3.Table2ID = tab2.Table2ID
WHERE someOtherID = 3 AND UserID = 40
GROUP BY CONVERT(NVARCHAR(10), TheDate, 120)
ORDER BY CONVERT(NVARCHAR(10), TheDate, 120)

我希望看到的是在结果末尾插入“GRAND TOTAL”行。最终输出如下所示

Date        Item2   Item2   Item3   Item4   Item5
2013-05-31  1       30      0       0       129
2013-06-03  0       90      0       15      78
2013-06-04  0       50      0       1       124
2013-06-05  0       100     0       17      58
2013-06-06  0       24      0       0       105
2013-06-07  0       50      0       1       83
2013-06-10  0       45      2       42      64
2013-06-11  3       43      0       14      90
2013-06-12  2       44      0       36      88
2013-06-13  1       34      0       15      92
GRAND TOTAL 7       510     2       141     911

有人对执行此操作的最佳方法有任何建议吗?

谢谢=D

最佳答案

您还可以在GROUP BY子句中使用WITH ROLLUP选项

SELECT CASE GROUPING([TheDate])
              WHEN 1 THEN 'GRAND TOTAL'
              ELSE CONVERT(NVARCHAR(10), TheDate, 120) 
              END as Date
   ...
FROM         Table1 AS a INNER JOIN
                  Table2 AS tab2 ON tab2.Table1ID = a.Table1ID LEFT OUTER JOIN
                  Table3 AS tab3 ON tab3.Table2ID = tab2.Table2ID
WHERE someOtherID = 3 AND UserID = 40
GROUP BY CONVERT(NVARCHAR(10), TheDate, 120) WITH ROLLUP
ORDER BY CONVERT(NVARCHAR(10), TheDate, 120)

关于sql - 在查询末尾插入 ROW,其中包含 SUM 列的总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20750484/

相关文章:

sql-server-2008 - 当前事务无法提交,不支持写入日志文件的操作。回滚事务

ruby - 使用 Ruby 和 SQL SMO 实现脚本自动化

sql-server - 空计算

mysql - 从其他列的 SQL SELECT 中向日期时间添加分钟

sql - NHibernate 是否支持从 SQL View 映射?

sql - EXEC Select 语句与动态列将值存储到变量中

sql-server - MS SQL Server 2008 更改触发器中插入的行值

sql - 是否有一种好的 SQL 方法来汇总以日期范围 block 作为输入的表?

mysql - 使用 SELECT 更新以创建排名(效率)

sql-server - DataWarehouse - 什么是好的定义?