Friday, December 19, 2008

Grouping Sets in SQL Server 2008

Consider a database table containing sales data.
The name of the table is dbo.[sales].

Consider a scenario where the management has asked the database developer to get all the sales records grouped by region and area, then the records grouped only by area and then the records grouped only by region. All of the above should be provided by one SQL query. The traditional way of implementing a query with these multiple groupings would be the following:

--Sales by region, by area
select region,area,SUM(sales_amount) as salesytd
from dbo.[sales]
group by region, area
--Sales by area
select null as region,area,SUM(sales_amount) as salesytd
from dbo.[sales]
group by area
--Sales by region
select region,null as area,SUM(sales_amount) as salesytd
from dbo.[sales]
group by region

Grouping Sets is a new T-SQL enhancement in SQL Server 2008. To this end with a special syntax we are able to define multiple groupings (that is, grouping sets) within a single T-SQL statement.

Rewritting the above statement by using grouping sets we have the following code:

--Sales (by region, by area), (by area), (by region)
select region,area,SUM(sales_amount) as salesytd
from dbo.[sales]
group by grouping sets (
(region, area),

It is obvious that grouping sets simplify the cases where we need to perform multiple groupings in our SQL queries. This applies very well on Data Warehouse Management System's queries among others.
Check out my latest eBook on SQL Server:
Tuning SQL Server - Ebook

Easily secure your SQL Server instances! Try out DBA Security Advisor!
DBA Security Advisor for SQL Server by SQLArtBits
DBA Security Advisor was developed by SQLArtBits. The tool was being carefully developed for an entire year and it contains comprehensive security checks and recommendations based on proven SQL Server security best practices. Feel free to download and use the Community Edition which is free and if you find it useful, you can consider upgrading to the Enterprise Edition!

Artemakis Artemiou [MVP]

Author & Editor

Artemakis Artemiou is a Senior SQL Server Architect, Software Developer and Microsoft Data Platform MVP. He is also an author, regular blogger, president of Cyprus.NET User Group and CY Country leader of INETA-EU. He is also the creator of DBA Security Advisor and In-Memory OLTP Simulator. Artemakis is a frequent guest author of worldwide well-respected online journals where he writes articles focusing on many SQL Server topics.

Reference: The SQL Server and .NET Hub (