SQLUSA.com
SQL SERVER 2008 GRAND SLAM
FREE TRIAL  CLICK HERE TO ORDER  SEARCH
SQL JOBS SQL Server Training Scripts JOB BANK
  SQL Server 2008 Training Scripts  
  SQL Server 2005 Training Scripts  
News SQL Server Articles SQL Format

How to build crosstab report by vendor by month using PIVOT?

Execute the following Microsoft SQL Server T-SQL scripts in SSMS Query Editor to create a crosstab report on Purchase Orders by the application of the PIVOT operator and Total Sales crosstab by using the CASE function.

-- SQL pivot rows into column - sql pivot crosstab – crosstab query sql server

-- MSSQL create stored procedure - create stored procedure microsoft sql server

USE AdventureWorks2008;

GO

CREATE PROC MonthlyPurchaseOrder

           @Year INT

AS

  BEGIN

    DECLARE  @MonthlyPurchaseOrders  TABLE(

                                           VendorName NVARCHAR(50),

                                           OrderMonth INT,

                                           TotalDue   MONEY

                                           )

    

    INSERT @MonthlyPurchaseOrders

    SELECT v.Name,

           DATEPART(MONTH,OrderDate),

           TotalDue

    FROM   Purchasing.Vendor v

           JOIN Purchasing.PurchaseOrderHeader poh

             ON v.BusinessEntityID = poh.VendorID

-- SQL wildcard selection

    WHERE  v.Name LIKE ('[c-p]%')

           AND YEAR(OrderDate) = @Year

    

    SELECT VendorName,

           Jan = '$' + convert(VARCHAR,[1],1),

           Feb = '$' + convert(VARCHAR,[2],1),

           Mar = '$' + convert(VARCHAR,[3],1),

           Apr = '$' + convert(VARCHAR,[4],1),

           May = '$' + convert(VARCHAR,[5],1),

           Jun = '$' + convert(VARCHAR,[6],1),

           Jul = '$' + convert(VARCHAR,[7],1),

           Aug = '$' + convert(VARCHAR,[8],1),

           Sep = '$' + convert(VARCHAR,[9],1),

           Oct = '$' + convert(VARCHAR,[10],1),

           Nov = '$' + convert(VARCHAR,[11],1),

           Dec = '$' + convert(VARCHAR,[12],1)

    FROM   @MonthlyPurchaseOrders

           PIVOT -- SQL Server pivot operator - pivot command sql server

           (SUM(TotalDue)

            FOR OrderMonth IN ( [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] ) )

            AS CrossTab

  END

GO

 

-- T-SQL execute stored procedure - execute stored procedure sql server 2008

EXEC MonthlyPurchaseOrder  2004

GO

 

/*  Partial results

 

VendorName              Jan         Feb         Mar

Capital Road Cycles     $45,314.14  $60,418.86  $60,418.86

Carlson Specialties     $29,107.42  $54,343.56  $36,229.04

Chicago City Saddles    $137,282.52 $281,003.85 $293,824.03

Chicago Rent-All        $1,829.48   $2,439.31   $2,439.31

*/

------------

-- SQL Crosstab Query - CASE Function - sql server crosstab query

------------

-- Sales total crosstab by year by country - SUM aggregate function

USE AdventureWorks2008;

 

SELECT   Territory = LEFT(t.Name,20),

         '$' + convert(VARCHAR,SUM(CASE

                                     WHEN YEAR(OrderDate) = 2001 THEN TotalDue

                                     ELSE 0

                                   END),1) AS YY2001,

         '$' + convert(VARCHAR,SUM(CASE

                                     WHEN YEAR(OrderDate) = 2002 THEN TotalDue

                                     ELSE 0

                                   END),1) AS YY2002,

         '$' + convert(VARCHAR,SUM(CASE

                                     WHEN YEAR(OrderDate) = 2003 THEN TotalDue

                                     ELSE 0

                                   END),1) AS YY2003,

         '$' + convert(VARCHAR,SUM(CASE

                                     WHEN YEAR(OrderDate) = 2004 THEN TotalDue

                                     ELSE 0

                                   END),1) AS YY2004

FROM     Sales.SalesOrderHeader soh

         JOIN Sales.SalesTerritory t

           ON soh.TerritoryID = t.TerritoryID

GROUP BY LEFT(t.Name,20)

ORDER BY Territory

/*

Territory   YY2001            YY2002            YY2003            YY2004

Australia   $1,446,497.17     $2,380,484.84     $4,547,123.28     $3,823,410.24

Canada      $2,173,647.15     $7,215,430.50     $8,186,021.92     $3,926,712.89

Central     $1,263,884.10     $3,518,185.48     $4,015,356.87     $1,771,532.74

France      $199,531.72       $1,717,145.74     $4,366,078.35     $2,853,948.66

Germany     $262,752.42       $575,960.10       $2,714,826.43     $2,386,224.55

Northeast   $754,833.20       $3,275,322.17     $3,833,030.25     $1,406,555.69

Northwest   $2,703,481.79     $5,651,688.67     $7,494,658.04     $4,952,772.28

Southeast   $1,928,148.61     $3,814,944.14     $3,261,403.00     $1,566,084.67

Southwest   $3,272,568.52     $9,947,538.71     $11,523,237.52    $6,470,114.83

United Kingdom    $322,207.53 $1,778,804.75     $4,365,879.44     $3,039,555.88

*/

------------ 

 

 

Order SQL 2008 GRAND SLAM Today!
SQLUSA.com Home Page
SQL Server Training at www.sqlusa.com.
SQL Server 2008 Video Training at www.sqlusa.com.
SQL Server 2005 Training Videos at www.sqlusa.com.
Microsoft SQL Server 2000 Training Videos at www.sqlusa.com.

FREE SQL & Business Intelligence / OLAP Short Videos on YOUTUBE.com

Microsoft Community Contributor 2011
Invest in Your SUCCESS!

Search SQLUSA FREE SQL Server Articles & FREE T-SQL Scripts


Copyright 2005-2011, SMI Corp. All Rights Reserved.

SQL Server 2012 is a program product of Microsoft Corporation.
SQL Server 2008 is a program product of Microsoft Corporation.
SQL Server 2005 is a program product of Microsoft Corporation.
SQL Server 2000 is a program product of Microsoft Corporation.