ROLLUP 연산자는 부분합과 합계가 포함된 보고서를 생성할 때 유용합니다. ROLLUP 연산자는 CUBE 연산자에서 생성된 결과 집합과 비슷한 결과 집합을 생성합니다. 자세한 내용은 큐브를 사용한 데이터 요약을 참조하십시오.
CUBE와 ROLLUP 연산자의 차이는 다음과 같습니다.
- CUBE는 선택한 열에서 모든 값의 조합에 대한 집계가 포함된 결과 집합을 생성합니다.
- ROLLUP은 선택한 열에서 값의 계층에 대한 집계가 포함된 결과 집합을 생성합니다.
예를 들어 Inventory라는 단순 테이블에는 다음이 포함되어 있습니다.
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
다음은 부분합 보고서를 생성하는 쿼리입니다.
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP
Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00
(7 row(s) affected)
쿼리에서 ROLLUP 키워드를 CUBE로 변경할 경우 끝에 다음 두 행이 추가로 반환되는 것을 제외하면 CUBE 결과 집합은 동일합니다.
ALL Blue 225.00
ALL Red 433.00
CUBE 연산은 Item 및 Color 값의 모든 가능한 조합에 대해 행을 생성합니다. 예를 들어 CUBE는 Item 값 Chair와 Color 값의 모든 가능한 조합(Red, Blue 및 Red + Blue)을 보고할 뿐만 아니라 Color 값 Red와 Item 값의 모든 가능한 조합(Chair, Table 및 Chair + Table)을 보고합니다.
GROUP BY 절의 오른쪽에 지정된 열의 각 값에 대해 ROLLUP 연산은 왼쪽 열 값의 모든 가능한 조합을 보고하지 않습니다. 예를 들어 ROLLUP은 각 Color 값에 대해 Item 값의 모든 가능한 조합을 보고하지 않습니다.
ROLLUP 연산의 결과 집합은 COMPUTE BY로 반환된 결과 집합과 비슷한 기능을 합니다. 그러나 ROLLUP 연산에는 다음과 같은 장점이 있습니다.
- ROLLUP은 단일 결과 집합을 반환하지만 COMPUTE BY는 여러 결과 집합을 반환하므로 응용 프로그램 코드가 복잡해집니다.
- ROLLUP은 서버 커서에서 사용할 수 있지만 COMPUTE BY는 사용할 수 없습니다.
- 쿼리 최적화 프로그램이 COMPUTE BY 실행 계획보다 효율적인 ROLLUP 실행 계획을 생성할 수 있습니다.
참고 항목
개념
COMPUTE 및 COMPUTE BY를 사용한 데이터 요약