2017-09-01 13 views
3

我有以下查询......如何将筛选器添加到GROUPING_ID结果?

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个不同的州/省和多个国家。

回答

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

+0

非常感谢Stefan!因为我整晚没有得到答案,我开始失去希望。这似乎是一个复杂的问题,但它所需要的只是聚结和碎片落在原地。 –