tsql - 如何向 GROUPING_ID 结果添加过滤器?

标签 tsql sql-server-2012

我有以下查询...

SELECT a.countryRegion, a.Stateprovince, SUM (soh.TotalDue) AS revenue,
CASE
WHEN GROUPING_ID(a.countryregion,a.stateprovince) = 0 THEN 'State/Province'
WHEN GROUPING_ID(a.countryregion,a.stateprovince) = 3 THEN 'Total'
WHEN GROUPING_ID(a.countryregion,a.stateprovince) = 1 THEN  'Country Total'
ELSE N'unknown'
END AS 'Level'
FROM saleslt.address AS a
JOIN saleslt.customeraddress AS ca
ON a.addressID = ca.addressID
JOIN saleslt.customer AS c
ON ca.customerID = c.customerID
JOIN salesLT.salesorderheader as soh 
ON c.customerID = soh.customerID
GROUP BY ROLLUP(a.countryregion, a.stateprovince)
ORDER BY  a.countryregion,a.stateprovince;

例如,如何获取包含值“美国小计”的“国家/地区”行以及包含“加利福尼亚州小计”值的州/省行?

该表包括大约 8 个不同的州/省和多个国家/地区。

最佳答案

您的 GROUP BY ROLLUP(a.countryregion, a.stateprovince) 语句应返回小计之前包含 NULL 值的字段。

您可以通过更改 select 语句来用“小计:”替换这些 NULL 值,如下所示:

SELECT 
    coalesce(a.countryRegion,"Sub Total:") as countryRegion,
    coalesce(a.Stateprovince, "Sub Total:") as Stateprovince, .............

您可以格式化报表输出以消除重复的小计,或使用子查询来清除重复。

您可以查看 LEAD() 和 LAG() 窗口函数,以从上一行获取 countryRegionStateProvince

关于tsql - 如何向 GROUPING_ID 结果添加过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008732/

相关文章:

sql-server - 如何在 SQL SERVER 2014 中以正确的顺序删除表?

sql - SQL Server 2012中如何查询最新记录?

full-text-search - Express with Advanced Services,无法创建全文索引

sql - TSQL 选择删除

SQL 服务器 : impact of column collation on T-SQL instructions

sql - 如何在 SQL Server 中使用 FOR XML PATH 删除前导空格

tsql - 如果…ELSE…两个互斥插入INTO #temptable

sql - T-SQL 覆盖特价并生成最终日期范围

sql - 降低查询计划中表值函数 - XML Reader 的成本 - 如何?

sql-server - 在 Service Broker 中向服务添加契约(Contract)后