W poprzednim poście wyjaśniłem do czego służy klauzula WITH ROLLUP. Dzisiaj zajmiemy się bardzo podobnym mechanizmem – WITH CUBE. Najlepiej wyjaśnić to znów na przykładzie tabeli. Załóżmy, że mamy poniższe zapytanie:
select StoreName,ProductType,sum(Number) from SoldProducts GROUP BY StoreName,ProductType
W wyniku wykonania otrzymamy:
StoreName | ProductType | Suma |
SklepA | komputery | 1 |
SklepA | spożywka | 3 |
SklepB | komputery | 4 |
SklepB | spożywka | 6 |
Jak wiemy z poprzedniego wpisu WITH ROLLUP umożliwi uzyskanie wyników hierarchicznych (ile całkowicie zostało sprzedanych produktów w danym sklepie):
StoreName | ProductType | Suma |
SklepA | komputery | 1 |
SklepA | spożywka | 3 |
SklepB | komputery | 4 |
SklepB | spożywka | 6 |
SklepA | NULL | 4 |
SklepB | NULL | 10 |
NULL | NULL | 14 |
Z kolei WITH CUBE zwróci trochę więcej wierszy:
select StoreName,ProductType,sum(Number) from SoldProducts GROUP BY StoreName,ProductType WITH CUBE
StoreName | ProductType | Suma |
SklepA | komputery | 1 |
SklepA | spożywka | 3 |
SklepB | komputery | 4 |
SklepB | spożywka | 6 |
SklepA | NULL | 4 |
SklepB | NULL | 10 |
NULL | NULL | 14 |
NULL | spożywka | 9 |
NULL | komputery | 5 |
Jak widać WITH CUBE stanowi rozszerzenie WITH ROLLUP – oprócz przedstawiania wyników hierarchicznych po pierwszej kolumnie również w wynikach uwzględnia się kategoryzowanie po drugiej kolumnie.