Dynamic Pivot Table in SQL 2008

Experts,

What is the basic SYNTAX to use for a DYNAMIC Pivot Table in SQL Server 2008?

My table looks like this:

HOSP_NAME, SUPPLIER, TOTAL_SPEND, CROSS_REF_SPEND, NOT_CROSS_REF_SPEND

I need to have a pivot like this:

 ------------------------------------ SUPPLIER_1_____SUPPLIER_2____SUPPLIER_3
HOSP_NAME_1                             10000.00                1000.00                 10.00
HOSP_NAME_2                             10000.00                1000.00                 10.00
HOSP_NAME_3                             10000.00                1000.00                 10.00
               

I need the SUPPLIER column heading to be the actual NAMES of the SUPPLIERS
LVL 17
MIKESoftware Solutions ConsultantAsked:
Who is Participating?
 
ralmadaCommented:
you didn't specify from what column the figures are coming from, so I've assumed they are comming from Total_spend column
basically you do it like this:

DECLARE @strSQL VARCHAR(MAX) 
DECLARE @COLS NVARCHAR(2000) 
  
SELECT @COLS = STUFF((SELECT  distinct '], [' + Supplier  
                                FROM yourtable ORDER BY 1
                                FOR XML PATH('') 
                                ), 1, 2, '') + ']' 
  
  
set @strSQL = 'select Hosp_name, ' + @COLS + ' from 
                (select Hosp_name, Supplier, Total_spend from yourtable) o 
                pivot(max(Total_spend) for Supplier in (' + @cols + '))p' --change max to sum if that's your requirement
  
exec(@strSQL)

Open in new window

0
 
ralmadaCommented:
oops, typo
DECLARE @strSQL VARCHAR(MAX) 
DECLARE @COLS NVARCHAR(2000) 
  
SELECT @COLS = STUFF((SELECT  distinct '], [' + Supplier  
                                FROM yourtable ORDER BY 1
                                FOR XML PATH('') 
                                ), 1, 2, '') + ']' 
  
  
set @strSQL = 'select Hosp_name, ' + @COLS + ' from 
                (select Hosp_name, Supplier, Total_spend from yourtable) o 
                pivot(max(Total_spend) for Supplier in (' + @cols + ')) as p' --change max to sum if that's your requirement
  
exec(@strSQL)

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.