DECLARE @PivotAsColumns AS NVARCHAR(MAX)
DECLARE @PivotColumns AS NVARCHAR(MAX)
DECLARE @SQLQuery AS NVARCHAR(MAX)
-- Drop Temp Table
IF OBJECT_ID('tempdb..#WoID1') IS NOT NULL
DROP TABLE #WoID1
IF OBJECT_ID('tempdb..#WoID2') IS NOT NULL
DROP TABLE #WoID2
SELECT WoCategoryID, RptColumn INTO dbo.#WoID1
FROM (Select Distinct Case When RptColumn > 0 Then WoCategoryID + ' AS RptCol' + RIGHT('00' + CAST(RptColumn AS varchar(2)),2) Else 'OTHER' End As WoCategoryID,
Case When RptColumn > 0 Then RptColumn Else 999 End As RptColumn
From dbo.WoCategory) As x
Order By RptColumn
SELECT @PivotAsColumns = COALESCE(@PivotAsColumns + ',','') + QUOTENAME(WoCategoryID)
FROM (SELECT WoCategoryID FROM dbo.#WoID1) AS PivotExample2
Select @PivotAsColumns
SELECT WoCategoryID, RptColumn INTO dbo.#WoID2
FROM (Select Distinct Case When RptColumn > 0 Then 'RptCol' + RIGHT('00' + CAST(RptColumn AS varchar(2)),2) Else 'OTHER' End As WoCategoryID,
Case When RptColumn > 0 Then RptColumn Else 999 End As RptColumn
From dbo.WoCategory) As Junk
Order By RptColumn
-- Select this for Column Headings in report
SELECT WoCategoryID, RptColumn FROM dbo.#WoID2
SELECT @PivotColumns = COALESCE(@PivotColumns + ',','') + QUOTENAME(WoCategoryID)
FROM (SELECT WoCategoryID FROM dbo.#WoID2) AS PivotExample
SELECT @PivotColumns
--PRINT @PivotColumns
-- Create the dynamic query with all the values for pivot column at runtime
-- If RptColumn is 0 then make Cat ID = 'OTHER' to capture rest of Cat $ in one column
SELECT @SQLQuery =
N'SELECT *
FROM (
SELECT
JM.JobNbr, JM.JobMasterPK, JM.SalesmanFK, JM.City, JM.StateCode,
Case When RptColumn > 0 Then ''RptCol'' + RIGHT(''00'' + CAST(RptColumn AS varchar(2)),2) Else ''OTHER'' End As WoCategoryID,
JD.Price as Amount,
Isnull(CU.FirstName, ''N/A'') As CustFirstName,
Isnull(CU.LastName, ''N/A'') As CusttName,
Isnull(USR.UserID, ''N/A'') As UserID,
Isnull(USR.FirstName, ''N/A'') As SalesFirstName,
Isnull(USR.LastName, ''N/A'') As LastName
FROM dbo.JobDetail JD
Inner Join dbo.WoType WT on JD.WoTypeFK = WT.WoTypePK
Inner Join dbo.WoCategory WC on WT.WoCategoryFK = WC.WoCategoryPK
Inner Join dbo.JobMaster JM on JD.JobMasterFK = JM.JobMasterPK
Left Outer Join dbo.Customer CU on JM.CustomerFK = CU.CustomerPK
Left Outer Join dbo.UserID USR on JM.SalesmanFK = USR.UserPK
Where JD.Price <> 0
) as src
PIVOT
(
SUM(Amount)
FOR WoCategoryID IN (' + @PivotColumns + ')
) as piv
Order BY JobNbr'
--SELECT @SQLQuery
--PRINT @SQLQuery
-- Execute dynamic query
EXEC sp_executesql @SQLQuery
-- Drop Temp Table
IF OBJECT_ID('tempdb..#WoID1') IS NOT NULL
DROP TABLE #WoID1
IF OBJECT_ID('tempdb..#WoID2') IS NOT NULL
DROP TABLE #WoID2