I would strongly recommend abandoning obsolete implicit joins.
You need to include ISNULL() in every element in the @sourcecolumn list in the SELECT . The reason that it generated the error is because the entire list of columns was enclosed in one statement: ISNULL(col1,col2,col3...,0) you need ISNULL(col1,0),ISNULL(col2,0)...
I would suggest creating a separate sourcecolumn variable for use in your SELECT .
Sort of:
SET @Sourcecolumn2 = STUFF((SELECT distinct ',ISNULL(\[' + CAST(FuelTypeID as varchar(4)) + ',0)\]as '+ CAST(FuelTypeID as varchar(4)) +' FROM tt_Manifest_Fuel_Distribution FOR XML PATH('')),1,1,'')
So ultimately:
![Declare @QUERY NVARCHAR(MAX), @Soucecolumn VARCHAR(MAX), @Sourcecolumn2 VARCHAR(MAX), @BeginningDate VARCHAR(MAX), @EndingDate VARCHAR(MAX), @CompanyID VARCHAR(2) SET NOCOUNT ON; SET @BeginningDate = convert(varchar(30), cast('2004-01-01' as date)); SET @EndingDate = convert(varchar(30), cast('2007-01-01' as date)); SET @CompanyID = convert(int, '2'); SET @Soucecolumn = STUFF((SELECT distinct ', \[' + CAST(FuelTypeID as varchar(4)) + '\]' FROM tt_Manifest_Fuel_Distribution FOR XML PATH('')),1,1,''); SET @Sourcecolumn2 = STUFF((SELECT distinct ',ISNULL(\[' + CAST(FuelTypeID as varchar(4)) + ',0)\] as '+ CAST(FuelTypeID as varchar(4))+' FROM tt_Manifest_Fuel_Distribution FOR XML PATH('')),1,1,''); SET @QUERY = '(SELECT ManifestID, TerminalID, ' + @Sourcecolumn2 + ' FROM ( SELECT mfd.ManifestID, m.TerminalID, mfd.FuelTypeID, mfd.FuelQuantity FROM tt_Manifest_Fuel_Distribution mfd, tt_Terminals t, tt_Fuel_Types ft, tt_Manifests m WHERE mfd.FuelTypeID=ft.FuelTypeID AND m.ManifestID=mfd.ManifestID AND m.CompanyID= ' + @CompanyID + ' AND m.ManifestInsertDate BETWEEN ''' + @BeginningDate + ''' AND ''' + @EndingDate + ''' ) up PIVOT (MAX(FuelQuantity) FOR \[FuelTypeID\] IN (' + @Soucecolumn + ')) AS pvt)' exec sp_executesql @QUERY][1]