Reputation: 25
This is my table:
CaseID AttributeName AttributeValue
03E07546-9C10-4399-B840-04F9CE211FB8 Case Title deepa04
03E07546-9C10-4399-B840-04F9CE211FB8 Body Part hand
03E07546-9C10-4399-B840-04F9CE211FB8 Diagnosis 123
E999866E-E8BE-4442-8A87-C419D482022E Case Title deep_case
E999866E-E8BE-4442-8A87-C419D482022E Body Part leg
E999866E-E8BE-4442-8A87-C419D482022E Diagnosis 123
I need to convert this into:
CaseID Case Title Body Part Diagnosis
03E07546-9C10-4399-B840-04F9CE211FB8 deepa04 hand 123
E999866E-E8BE-4442-8A87-C419D482022E deep_case leg 123
How can I achieve this using dynamic pivot functions in SQL Server 2008?
Upvotes: 0
Views: 1213
Reputation: 24046
try tihis:
select CaseID , [Case Title],[Body Part], Diagnosis
from <your_table>
PIVOT (MAX(AttributeValue) FOR AttributeName IN
([Case Title],[Body Part], Diagnosis)) P
Edit1: If column Names are Dynamic You could do this
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(AttributeName)
from <your_table>
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT CaseID , ' + @cols + ' from t_case
pivot
(
MAX(AttributeValue)
for AttributeName in (' + @cols + ')
) p '
print(@query)
execute(@query)
Upvotes: 1
Reputation: 138960
This is how you can use pivot
.
select P.CaseID, P.[Case Title], P.[Body Part], P.Diagnosis
from (
select CaseID, AttributeName, AttributeValue
from YourTable
) as T
pivot (
min(AttributeValue)
for AttributeName in ([Case Title], [Body Part], [Diagnosis])
) as P
Upvotes: 0