2013-07-09 2 views
0

이전에 질문했을 수도 있지만 실제로 답변을 찾을 수 없다는 것을 알고 있습니다.T-SQL에서 열 값을 행으로 바꿈

+===============================+=============================+ 
| NAME       | ATTRIBUTE     | 
+===============================+=============================+         
| BadgeType      | Permanent     | 
+-------------------------------+-----------------------------+ 
| PrimaryLocationInCompany  | No       | 
+-------------------------------+-----------------------------+ 
| AdminAccessToProductionServer | No       | 
+-------------------------------+-----------------------------+ 
| AccessToImportantFIles  | No       | 
+-------------------------------+-----------------------------+ 
| Waiver_Number     | 56987      | 
+-------------------------------+-----------------------------+ 
| Summary      | User not much active  | 
+-------------------------------+-----------------------------+ 
| TimeStamp      | 3/3/2009     | 
+-------------------------------+-----------------------------+ 
| UserID      | 86478925     | 
+-------------------------------+-----------------------------+ 

내가하고 싶은 것은 행에 NameAttribute 값을 모두 전치하는 것입니다 : I는 다음과 같습니다 #TEMP라는 이름의 임시 테이블을 가지고있다. Attribute 값은 다를 수 있지만 Name 값은 항상 고정되어 있습니다.

결과는 다음과 같아야합니다

+----------+---------------+------------------------------+--------------------------------+-----------------------+--------------------------------------------------------+----------+-----------+ 
| UserID | BadgeType  | PrimaryLocationIntelFacility | adminAccessToProductionServer | AccessToClassifiedData| Info_Sec_Waiver_Number         | Summary | TimeStamp | 
+----------+---------------+------------------------------+--------------------------------+-----------------------+--------------------------------------------------------+----------+-----------+ 
| 11313403 | GREEN   | No       | No        | No     | This contingent worker is eligible for remote access. | 3/3/2009 |   | 
+----------+---------------+------------------------------+--------------------------------+-----------------------+--------------------------------------------------------+----------+-----------+ 
+1

당신이 행 모두를위한 공통의 식별자를해야합니까 위해 아래의 확인이

SELECT UserID,BadgeType,PrimaryLocationInCompany,AdminAccessToProductionServer,AccessToImportantFIles,WaiverNumber,Summary,[TimeStamp] FROM ( SELECT * FROM #Temp ) p PIVOT ( MIN([ATTRIBUTE]) FOR [NAME] IN(BadgeType,PrimaryLocationInCompany,AdminAccessToProductionServer,AccessToImportantFIles,WaiverNumber,Summary,[TimeStamp],UserID) ) T 

시도 ? –

+0

결과 테이블이 엉망입니다. 두 행에 같은 수의 열이 없습니다. 또한, 'PrimaryLocationIntelFacility'는 어디서 오는가? – Brewal

+0

가능한 복제 http://stackoverflow.com/q/13454984/62576 –

답변

0

는 또한 동적 열

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + [NAME] 
        from #Temp 
        group by [NAME] 
      FOR XML PATH('')) 
     ,1,1,'') 

set @query = 'SELECT ' + @cols + ' from 
      (
       select * from #Temp 
      ) x 
      pivot 
      (
       MAX([ATTRIBUTE]) 
       for [NAME] in (' + @cols + ') 
      ) p ' 

execute(@query) 
관련 문제