2012-08-08 34 views
0

轉換行到列這是我的表:使用數據透視

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 

我需要將其轉換成:

CaseID        Case Title Body Part Diagnosis 
03E07546-9C10-4399-B840-04F9CE211FB8 deepa04  hand  123 
E999866E-E8BE-4442-8A87-C419D482022E deep_case leg  123 

我怎樣才能實現在SQL Server 2008中使用這個動態透視功能呢?

+0

檢查此鏈接http://weblogs.asp.net/salimfayad /archive/2008/01/30/rows-to-columns.aspx – StackTrace 2012-08-08 06:24:53

回答

0

這就是你可以如何使用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 
+0

但是案例標題,正文部分,診斷是動態值,在這種情況下我們該怎麼做? – 2012-08-08 06:46:48

+0

然後你喜歡[this](http://stackoverflow.com/a/11858888/569436) – 2012-08-08 06:58:50

1

嘗試tihis:

select CaseID , [Case Title],[Body Part], Diagnosis 
from <your_table> 
PIVOT (MAX(AttributeValue) FOR AttributeName IN 
([Case Title],[Body Part], Diagnosis)) P 

EDIT1:如果將列名動你能做到這一點

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) 
+0

但是Case Title,Body Part,Diagnosis是動態值,那麼我們該怎麼做? – 2012-08-08 06:45:27

+0

然後我們可以做一個動態數據透視查詢 – 2012-08-08 06:46:18

+0

列名我們可以存儲在一個變量中,並在查詢中使用它 – 2012-08-08 06:46:53