を私たちは違いを理解することができますROLLUPとCUBEを簡単な例で示します。学生の四半期テストの結果を含む表があるとします。四半期と学生に対応する合計を表示する必要があります。
SELECT * INTO #TEMP
FROM
(
SELECT 'Quarter 1' PERIOD,'Amar' NAME ,97 MARKS
UNION ALL
SELECT 'Quarter 1','Ram',88
UNION ALL
SELECT 'Quarter 1','Simi',76
UNION ALL
SELECT 'Quarter 2','Amar',94
UNION ALL
SELECT 'Quarter 2','Ram',82
UNION ALL
SELECT 'Quarter 2','Simi',71
UNION ALL
SELECT 'Quarter 3' ,'Amar',95
UNION ALL
SELECT 'Quarter 3','Ram',83
UNION ALL
SELECT 'Quarter 3','Simi',77
UNION ALL
SELECT 'Quarter 4' ,'Amar',91
UNION ALL
SELECT 'Quarter 4','Ram',84
UNION ALL
SELECT 'Quarter 4','Simi',79
)TAB
1. ROLLUP(1列に対応するため、合計を見つけることができます)
(a)すべての四半期では、各学生の合計スコアを取得します。
SELECT * FROM #TEMP
UNION ALL
SELECT PERIOD,NAME,SUM(MARKS) TOTAL
FROM #TEMP
GROUP BY NAME,PERIOD
WITH ROLLUP
HAVING PERIOD IS NULL AND NAME IS NOT NULL
// Having is used inorder to emit a row that is the total of all totals of each student
には、以下の結果である(a)の
(b)は、あなたがの結果が続き、各四半期
SELECT * FROM #TEMP
UNION ALL
SELECT PERIOD,NAME,SUM(MARKS) TOTAL
FROM #TEMP
GROUP BY PERIOD,NAME
WITH ROLLUP
HAVING PERIOD IS NOT NULL AND NAME IS NULL
の合計スコアを取得する必要がありINCASE( b)
2. CUBE
SELECT PERIOD,NAME,SUM(MARKS) TOTAL
FROM #TEMP
GROUP BY NAME,PERIOD
WITH CUBE
HAVING PERIOD IS NOT NULL OR NAME IS NOT NULL
後はCUBE
今、あなたは疑問を抱いすることができるの結果である(シングルショットで四半期の合計だけでなく、学生を見つけます。) ROLLUPとCUBEのリアルタイム使用。時には、1回のショットで各四半期の合計と各学生の合計を表示する必要があるレポートが必要な場合もあります。ここに例があります
上記のCUBEクエリを少し変更していますが、両方の合計が必要です。
SELECT CASE WHEN PERIOD IS NULL THEN 'TOTAL' ELSE PERIOD END PERIOD,
CASE WHEN NAME IS NULL THEN 'TOTAL' ELSE NAME END NAME,
SUM(MARKS) MARKS
INTO #TEMP2
FROM #TEMP
GROUP BY NAME,PERIOD
WITH CUBE
DECLARE @cols NVARCHAR (MAX)
SELECT @cols = COALESCE (@cols + ',[' + PERIOD + ']',
'[' + PERIOD + ']')
FROM (SELECT DISTINCT PERIOD FROM #TEMP2) PV
ORDER BY PERIOD
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT * FROM
(
SELECT * FROM #TEMP2
) x
PIVOT
(
SUM(MARKS)
FOR [PERIOD] IN (' + @cols + ')
) p;'
EXEC SP_EXECUTESQL @query
今、あなたはあなたがSET、CUBE、ROLLのUPをグループ化についての詳細を見つけることができ、以下の結果
興味深いを取得するにはいくつかの方法でALL GROUP BY + UNIONを展開します。私はデザイナーがなぜそれを選んで、それがどのように振る舞うかのために特別な属性のパラメータを追加したのではないかと思います。基本的に同じことをするが、わずかに異なるものには明確な名前を付けるのはかなりばかげている。 – user2326106