T-SQL i Grouping Sets

Prawdopodobnie wszyscy znają już klauzulę group by w zapytaniach SQL – nie stanowi żadnej rewelacji. Myślę jednak, że znacznie mniej popularniejszą klauzulą jest GROUPING SETS. Rozważmy następujące zapytanie:

select * from Products GROUP BY ProductCategory
union all
select * from Products GROUP BY ProductSubcategory

Zapytanie zwróci wiersze pogrupowane po kategorii produktu oraz podkategorii. Należy podkreślić, że grupowania wykonywane są niezależnie od siebie i nie mają charakteru hierarchicznego (tak jak to byłoby w przypadku umieszczenia kolumn w jednym GROUP BY). Używając Gruping Sets, powyższe zapytanie można zapisać:

select * from Products GROUP BY  GROUPING SETS ((ProductCategory),(ProductSubcategory))

Podobnie zapytanie:

select * from Products GROUP BY ProductCategory,ProductSubcategory;

można zastąpić:

select * from Products GROUP BY GROUPING SETS ((ProductCategory,ProductSubcategory));

Ponadto w nawiasach można wykorzystać ROLL UP oraz CUBE.

Leave a Reply

Your email address will not be published.