SQLUSA
SQL Server 2005 Administration
Multi-Dimensional Business Intelligence
SQL Server 2005 Programming
Crash Course in SQL Server 2005

Microsoft SQL Server 2005 Best Practices

How to architect a SQL Server 2005 dynamic PIVOT?

 

Execute the following script in Query Editor to demonstrate the design of a dyncamic PIVOT:


USE AdventureWorks
GO

DECLARE @OrderYear AS TABLE(YYYY int NOT NULL PRIMARY KEY)
DECLARE @DynamicSQL AS nvarchar(4000)
INSERT INTO @OrderYear
SELECT DISTINCT YEAR(OrderDate)
FROM Sales.SalesOrderHeader

DECLARE @ReportColumnNames AS nvarchar(MAX), @IterationYear AS int
SET @IterationYear = (SELECT MIN(YYYY) FROM @OrderYear)
SET @ReportColumnNames = N''
WHILE (@IterationYear is not null)
BEGIN
SET @ReportColumnNames = @ReportColumnNames + N',['+CAST(@IterationYear AS nvarchar(10))+N']'
SET @IterationYear = (SELECT MIN(YYYY) FROM @OrderYear WHERE YYYY > @IterationYear)
END

SET @ReportColumnNames = SUBSTRING(@ReportColumnNames, 2, LEN(@ReportColumnNames))

SET @DynamicSQL = N'SELECT *
FROM (SELECT [Store (Freight Summary)]=s.Name, YEAR(OrderDate) AS OrderYear,
Freight = convert(money,convert(varchar, Freight))
FROM Sales.SalesOrderHeader soh
JOIN Sales.Store s
ON soh.CustomerID = s.CustomerID) as Header
PIVOT (SUM(Freight) FOR OrderYear IN(' + @ReportColumnNames + N')) AS Pvt
ORDER BY 1'
PRINT @DynamicSQL
EXEC sp_executesql @DynamicSQL
GO


 

SQLUSA - The Best SQL Server 2005 Training in the World
 
 
SQLUSA.com Home Page