I have a table like this
Id Name FromAddress ToAddress
1 Joey ABC JKL
2 Joey DEF MNP
3 Joey GHI OQR
I am looking for the following output with dynamic pivot in SQL Server
Name FromAdrs1 FromAdrs2 FromAdrs3 ToAdrs1 ToAdrs2 ToAdrs3
Joey ABC DEF GHI JKL MNP OQR
Note: The number of rows changes based on the Id value, so I am trying to get the output using dynamic Pivot.
Here is the code that I tried, it's looks like it is correct, but throwing me an error.
IF OBJECT_ID('temp..#temp') IS NOT NULL
DROP TABLE #temp
CREATE TABLE #temp
(
Id INT, Name VARCHAR(10), FromAddress VARCHAR(10), ToAddress VARCHAR(10)
)
INSERT INTO #temp VALUES (1, 'Joey', 'ABC', 'JKL'), (2, 'Joey', 'DEF', 'MNP'), (3, 'Joey', 'GHI', 'OQR')
--SELECT * FROM #temp
DECLARE @colsFrom AS NVARCHAR(MAX),
@colsTo AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @colsFrom = STUFF((SELECT distinct ',' + QUOTENAME(CONVERT(VARCHAR(2), t.id) + 'From')
FROM #temp t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @colsTo = STUFF((SELECT distinct ',' + QUOTENAME(CONVERT(VARCHAR(2), t.id) + 'To')
FROM #temp t
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT *, ' + @colsFrom + ', ' + @colsTo + ' from
(
select *
from #temp
) T
PIVOT
(
max(FromAddress)
for Id in (REPLACE('''+@colsFrom+''',''From'',''''))
) p
PIVOT
(
max(ToAddress)
for Id in (REPLACE('''+@colsTo+''',''To'',''''))
) Q'
execute(@query)
DROP TABLE #temp
Any help is appreciated. Thank you all for your time.
Edit: This is the error
