- CUBE
A csoportosító sorokon kívül még minden megadott csoport és alcsoport szerinti összegző sort ad az eredményhez. A csoportosító tulajdonság NULL értékként szerepel az eredménysorban. Az így kapott ún. kocka dimenziója attól függ, hogy hány csoportosító operandust használunk.
SELECT EmployeeID AS Alkalmazott, ShipVia AS Szállító, SUM(Freight) [Szállítmány Összes]
FROM Orders
WHERE EmployeeID < 3
GROUP BY EmployeeID, ShipVia WITH CUBE
- ROLLUP
Hasonló összesítésre használható, mint a CUBE, azzal a különbséggel, hogy nem készül el az összes lehetséges összegző sor, hanem csak a hierarchia szerint alacsony szinttől növekedve a csúcsig a csoportosító feltételek megadott sorrendje szerint.
SELECT EmployeeID AS Alkalmazott, ShipVia AS Szállító, SUM(Freight) [Szállítmány Összes]
FROM Orders
WHERE EmployeeID < 3
GROUP BY EmployeeID, ShipVia WITH ROLLUP
Fontos tudnivaló! DISTINCT kulcsszó nem használható együtt a CUBE és ROLLUP paraméterekkel. Együttes használatuk esetén hibaüzenetet kapunk.
Zavaró lehet, ha a lekérdezett adatok között NULL érték található, hiszen a csoportosító sorokat is NULL-ként kapjuk vissza. A megkülönböztetésre használjuk a GROUPING függvényt, amelynek paramétere az adott oszlop, és visszaadott értéke 1, ha az adott sort a CUBE vagy ROLLUP funkció adta az eredményhez, és 0, ha NULL érték van az eredményben.
SELECT CASE WHEN (GROUPING(TitleOfCourtesy) = 1) THEN ‘ALL’ ELSE ISNULL(TitleOfCourtesy, ‘UNKNOWN’)
END AS TitleOfCourtesy,
CASE WHEN (GROUPING(City) = 1) THEN ‘ALL’
ELSE ISNULL(City, ‘UNKNOWN’) END AS City,
COUNT(*)
FROM Employees
GROUP BY TitleOfCourtesy, City WITH CUBE
Forrás: http://www.softwareonline.hu/Article/View.aspx?id=3705