SQL Server 2008の
が
GROUPING SETS()
を導入していますが、後が何であるかだけのようです:
は、ビューを使用します。他の人が提案するUNIONソリューションは、今すぐGROUPING SETS
という単一の選択で簡単に置き換えることができます。あなたはこのようにそれを使用している
基本的には、:
SELECT A, B, C
FROM …
WHERE …
GROUP BY GROUPING SETS ((A), (B), (C))
ので
SELECT A, NULL, NULL, …
FROM …
WHERE …
GROUP BY A
UNION ALL
SELECT NULL, B, NULL, …
FROM …
WHERE …
GROUP BY B
UNION ALL
SELECT NULL, NULL, C, …
FROM …
WHERE …
GROUP BY C
に相当する、クエリは次のようになります。
SELECT X, Y, COUNT(*)
FROM your complex joins and filters
GROUP BY GROUPING SETS ((X), (Y))
またはこのよう:
SELECT
CASE WHEN X IS NULL THEN 'Y' ELSE 'X' END AS ObjType
CASE WHEN X IS NULL THEN Y ELSE X END AS Obj,
COUNT(*)
FROM your complex joins and filters
GROUP BY GROUPING SETS ((X), (Y))
2番目の値は、X
をNULLにすることはできません。
参考文献:
ニース..ちょうど入れ替え名/定義:)感謝 – ariel
かどうかわからない@ariel "optimisあなたがあなたの質問で参照するアトオンは、コードまたはパフォーマンスですか?パフォーマンスの最適化として、これの効果は中立になります。クエリー定義は再利用されますが、作業は再利用されません。CTEはまだ2回評価され、計画はおそらく元のクエリと同じになります。 –
はい、実行計画でそれを見た – ariel