sql - 汇总总计和小计

标签 sql sql-server null rollup

我有一个脚本可以生成一个几乎就在那里的结果集!我正在尝试获得小计和总计。我在年份列中得到小计,在最后得到总计。我的目标是让最终结果表明“总计”而不是小计。请注意,由于汇总功能,我的最后一行 'location' 也返回 null。

SELECT
  YEAR,
  COUNT(ACCOUNTS) AS 'ACCOUNTS',        
  SUM(BALANCE) as 'BAL',
  LOCATION AS 'LOCATION'
FROM 
  ACCOUNT A 
WHERE C.CREATE BETWEEN 
  DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) 
  AND DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0)
GROUP BY 
  LOCATION, YEAR
WITH ROLLUP

结果集...
YEAR  ACCOUNTS  BAL        LOCATION
----  --------  ---------  --------
NULL        11   80687.51  WA
NULL       107  592980.18  NULL

想要的结果集...
YEAR          ACCOUNTS  BAL        LOCATION
----          --------  ---------  --------
sub total           11   80687.51  WA
grand total        107  592980.18  ALL

最佳答案

您可以使用 GROUPING_ID识别每行聚合的分组集

SELECT
   CASE GROUPING_ID(LOCATION, YEAR)
     WHEN 0 THEN YEAR
     WHEN 2 THEN N'Sub total: ' + STR(YEAR) 
     WHEN 3 THEN N'Grand total'
  END
   COUNT(ACCOUNTS) AS 'ACCOUNTS',      
   SUM(BALANCE) as 'BAL',
   LOCATION AS 'LOCATION'
 FROM ACCOUNT A 
 WHERE C.CREATE BETWEEN DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) 
                    AND DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0)
 GROUP BY LOCATION, YEAR
 WITH ROLLUP

关于sql - 汇总总计和小计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135033/

相关文章:

c# - Window Forms 和 SQL 连接实例的最佳实践

sql - Postgres 选择(按类型分组)

sql - 如何在 30 分钟窗口中选择具有最高时间戳的行?

SQL 死锁..现在处于单用户模式

sql-server - Asp.net Core 2.2 将整个DB表存储在内存中EF Core

ios - 通过函数 prepare for segue 将数据传递给 ViewController 不起作用

php - 检查值是否为 isset 和 null

sql - Oracle 查询使用 Xpath 获取同一节点的逗号分隔列表

flutter - 如何删除Dart中的可选实例变量?

javascript - 如何根据经纬度计算距离