2017-09-01 2 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!私は一晩中答えが得られなかったので、希望を失い始めました。それは複雑な質問のように思えましたが、必要なのは合体して断片が正しい場所に落ちたことでした。 –

関連する問題