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
UNION ALL
--Sales by area
select null as region,area,SUM(sales_amount) as salesytd
from dbo.[sales]
group by area
UNION ALL
--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),
(area),
(region)
)

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.

Labels: , ,