2017-09-01 15 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!因爲我整晚沒有得到答案,我開始失去希望。這似乎是一個複雜的問題,但它所需要的只是聚結和碎片落在原地。 –