【问题标题】:How do I add filters to GROUPING_ID results?如何向 GROUPING_ID 结果添加过滤器?
【发布时间】:2017-09-01 22:32:08
【问题描述】:

我有以下疑问...

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;

例如,如何让 Country 行包含值“United States Subtotal”,以及 state/province 行包含值“California Subtotal”?

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

【问题讨论】:

    标签: tsql sql-server-2012


    【解决方案1】:

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

    您可以将这些 NULL 值替换为“小计:”,方法是更改​​您的 select 语句,如下所示:

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

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

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

    【讨论】:

    • 非常感谢斯特凡!我开始失去希望,因为我整晚都没有得到答案。这似乎是一个复杂的问题,但它所需要的只是合并,然后各个部分就位。
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 2018-03-14
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多