2012-03-09 3 views
1
원래

에 열의 알 수없는 # 변환 :SQL 서버 2008 피벗은 행

EmpID  Week1  Week2 Week3...(Unknown unmber of weeks) 
001  1   2  3 
002  2   1  0 
003  3   4  0 

대상 :

내 숙제를 한
EmpID Attibute AttributeValue 
001   Week1  1 
001   Week2  2 
001   Week3  3 
002   Week1  2 
002   Week2  1 
002   Week3  0 
003   Week1  3 
003   Week2  4 
003   Week3  0 
      . 
      . 
      . 
(will auto generate unknown # of weeks and their values) 

, 나는이 하나 같이 후 질문을 발견하지 않았습니다. 내가 발견 한 유일한 것은 "Dynamic SQL Server Pivot (UNPIVOT) column name to a row value"입니다. 해당 쿼리를 실행하려고했지만 SQL Server에서 아무런 결과도 반환하지 않고 "명령이 성공적으로 완료되었습니다."라는 메시지가 표시됩니다.

답변

2

글쎄, 알 수없는 숫자의 열을 테이블에 넣을 수는 없지만 Using PIVOT and UNPIVOT을 참조하십시오.

SELECT EmpID, Attibute, AttributeValue 
FROM 
    (SELECT EmpID, Week1, Week2, Week3 
    FROM pvt) p 
UNPIVOT 
    (AttributeValue FOR Attibute IN 
     (Week1, Week2, Week3) 
)AS unpvt 
1

테이블 이름 Emp이라고 가정하면 Week% 일치 열 피벗 해제하려는 :

declare @SQL nvarchar(max) 

set @SQL = 
    N'select EmpID, Attribute, AttributeValue from Emp unpivot (AttributeValue for Attribute in ('+ 
    stuff((select ','+quotename(C.name) 
     from sys.columns as C 
     where C.object_id = object_id('Emp') and 
       C.name like 'Week%' 
     for xml path('')), 1, 1, '')+ 
    N')) as U order by EmpID, Attribute' 

exec (@SQL)