2013-05-13 6 views
4

"하나"로 여러 열을 unpivot하려면 어떻게합니까?TSQL - 여러 열의 피벗 해제

지금 당장 필자는 각 열에 대해 unpivot을 사용하고 있지만 빈 행이 많이 생성됩니다.

스크린 샷을 참조하십시오. enter image description here

상단에 입력 된 데이터가 표시됩니다. 순간 나는이 코드 중간에 테이블에있어 : ​​

SELECT [ID], [RowNumber], [Year], [Sales] FROM (
     SELECT ID, RowNumber, [Sales 2013] as [2013], [Sales 2014] as [2014] 
     FROM mytable) p  UNPIVOT (
     [Sales] FOR [Year] IN ([2013], [2014]) )AS unpvt ; 

하지만 실제 데이터를보다 열과 다루는 년 이상을 포함하고 있기 때문에이 바닥 테이블 구조에 도착하는 것이 훨씬 더 좋을 것 같아 와.

Here's a Fiddle 샘플 데이터.

희망을 얻으려면 나에게 접근 할 수있는 방법을 보여줄 수 있기를 바랍니다. 감사합니다.

답변

8
SELECT [ID], 
     [RowNumber], 
     [Year], 
     Sales, 
     Budget 
FROM mytable 
     CROSS APPLY (VALUES (2013, [Sales 2013], [Budget 2013]), 
          (2014, [Sales 2014], [Budget 2014])) 
        V([Year], Sales, Budget) 

SQL Fiddle

+0

두 가지 대답 모두에 감사드립니다. 나는 읽고 이해하기가 더 쉬운 것으로 갈 것입니다 :-) – SvenB

+0

SQL Fiddle을 지원하는 훌륭한 게시글입니다. 이는 Unpenvot에 대한 Frankenstein의 가능한 접근법으로 두려운 구현에서 벗어나는 데 도움이되었습니다. – GoldBishop

2

한 가지 방법은 unpivoting 후 repivot하는 -과 같이 :

select [Id], [Year], [Sales], [Budget], [Actual] from 
(SELECT [Id], 
     Left([Colhead], charindex(' ',[Colhead])-1) [Category], 
     Right([Colhead], len([Colhead])-charindex(' ',[Colhead])) [Year], 
     [Figures] 
FROM (SELECT * FROM mytable) p 
     UNPIVOT ([Figures] FOR [Colhead] IN 
       ([Sales 2013],[Sales 2014],[Budget 2013],[Budget 2014],[Actual 2013],[Actual 2014]) 
    ) 
AS unpvt) as u 
pivot 
(max([Figures]) for [Category] in ([Sales], [Budget], [Actual])) as p 

SQLFiddle here.