Tuesday, October 23, 2012

SQL Product Highlight Red Gate Software - SQL Monitor SQL Server performance monitoring and alerting - SQL Monitor offers an easy entrance to advanced server monitoring with a simple design that's a refreshing change from the status quo. Red Gate have added custom metrics and user roles to the product without spoiling its ease-of-use, to help you answer that timeless question, 'How healthy are your servers?' Learn more! SQL Server Jobs SQL BI Developer Fort Mill, SC Salary = $70-90K Industry = Financial SQL Developer Portland, OR Salary = $70-75K Industry = Benefits solutions provider Review all opportunities Crosstab queries using PIVOT in SQL Server

Tags

Problem


In SQL Server 2000 there was not a simple way to create cross-tab queries, but a new option first introduced 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 to allow you produce cross-tab results.

Solution


This new feature in SQL Server 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.


































SalesPersonProductSalesAmount
BobPickles$100.00
SueOranges$50.00
BobPickles$25.00
BobOranges$300.00
SueOranges$500.00

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:


















SalesPersonOrangesPickles
Bob$300.00$125.00
Sue$550.00


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
FROM
(SELECT SalesPerson, Product, SalesAmount
FROM ProductSales ) ps
PIVOT
(
SUM (SalesAmount)
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.

  • (1) The SELECT statement

    • SELECT SalesPerson, [Oranges] AS Oranges, [Pickles] AS Pickles

    • This portion of the query selects the three columns for the final result set (SalesPerson, Oranges, Pickles)


     

  • (2) The query that pulls the raw data to be prepared

    • (SELECT SalesPerson, Product, SalesAmount FROM ProductSales) ps

    • This query pulls all the rows of data that we need to create the cross-tab results.  The (ps) after the query is creating a temporary table of the results that can then be used to satisfy the query for step 1.


     

  • (3) The PIVOT expression

    • PIVOT (SUM (SalesAmount) FOR Product IN ( [Oranges], [Pickles]) ) AS pvt

    • This query does the actual summarization and puts the results into a temporary table called pvt




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.

Next Steps



  • Take a look at the new PIVOT option that SQL Server offers to see how you can use this

  • Review the older methods that were discussed in this prior tip.  These options will still work in all versions of SQL Server and may provide a better solution.

  • Try to write some more complex queries to take advantage of this new option.

silahkan isi komentar anda disini
EmoticonEmoticon

Note: Only a member of this blog may post a comment.