In SQL Server 2000 there was not a simple way to create cross-tab queries, but a new option in SQL Server 2005 has made this a bit easier. We took a look at how to create cross-tab queries in SQL Server 2000 in this previous tip and in this tip we will look at this new feature in SQL Server 2005 to allow you produce cross-tab results.
With SQL Server 2005 a lot of new features have been introduced. One of these new features is PIVOT. What this allows you to do is to turn query results on their side, so instead of having results listed down like the listing below, you have results listed across.
With a straight query the query results would be listed down, but the ideal solution would be to list the Products across the top for each SalesPerson, such as the following:
To use PIVOT you need to understand the data and how you want the data displayed. First you have the data rows, such as SalesPerson and the columns, such as the Products and then the values to display for each cross section. Here is a simple query that allows us to pull the cross-tab results.
|SELECT SalesPerson, [Oranges] AS Oranges, [Pickles] AS Pickles|
(SELECT SalesPerson, Product, SalesAmount
FROM ProductSales ) ps
FOR Product IN
( [Oranges], [Pickles])
) AS pvt
So how does this work?
There are three pieces that need to be understood in order to construct the query.
Another key thing to notice in here is the use of the square brackets [ ] around the column names in both the SELECT in part (1) and the IN in part (3). These are key, because the pivot operation is treating the values in these columns as column names and this is how the breaking and grouping is done to display the data.