2012-02-10 2 views
0

여기에 많은 행 - 열 - 스레드가 있지만 정확히 찾고있는 것을 찾을 수 없습니다. 이것으로SQL Server 2005에서 행과 열을 어떻게 전환합니까?

ID Foo Bar 
1  A  F 
2  B  G 
3  C  H 
4  D  I 
5  E  J 

:

에 대해 다음 표를 변환합니까

ID 1 2 3 4 5 
Foo A B C D E 
Bar F G H I J 

감사합니다! 나는 SQL Server 2005를 사용하고 있습니다.

+0

당신은'PIVOT'에 이어'UNPIVOT'을 할 수 있습니다. 그러나 항상 그렇듯이 그것은 고정 된 크기에서만 작동합니다. 그리고 언제나 그렇듯이 질문을해야합니다 : SQL에서 보고서 형식을 지정하는 이유는 무엇입니까? 행과 열은 SQL에서 * 같은 것이 아닙니다 *. –

+0

원본 테이블에 열이 2 개만있는 경우 피벗을 사용하여이 작업을 수행했습니다. 그러나 3 (또는 더 많은 열)에 대한 답변을 찾을 수 없습니다. –

+0

빠른 응답을 보내 주셔서 감사합니다. 나는 SQL에서 꽤 새로운데 ... 어디서 포맷을해야합니까? –

답변

0

여기는 이고 대답은입니다. 내 의견에 언급했듯이,이 작업은 당신이 작업하고있는 차원에서만 작동합니다. 첫째, 샘플 데이터 :

declare @Table table (ID int not null,Foo char(1) not null,Bar char(1) not null) 
insert into @Table (ID,Foo,Bar) 
select 1,'A','F' union all 
select 2,'B','G' union all 
select 3,'C','H' union all 
select 4,'D','I' union all 
select 5,'E','J' 

select * from @Table --As per your original data table 

;with Rot1 as (
    select 
     * 
    from 
     @Table unpivot (Value for Col in (Foo,Bar)) t 
) 
select * from Rot1 -- See below 

;with Rot1 as (
    select 
     * 
    from 
     @Table unpivot (Value for Col in (Foo,Bar)) t 
), Rot2 as (
    select 
     * 
    from Rot1 pivot (MAX(Value) for ID in ([1],[2],[3],[4],[5])) t 
) 
select * from Rot2 -- As per your required result 

출력 단지 Rot1에서 선택입니다 :

ID Value Col 
1 A Foo 
1 F Bar 
2 B Foo 
2 G Bar 
3 C Foo 
3 H Bar 
4 D Foo 
4 I Bar 
5 E Foo 
5 J Bar 

그래서, 우리는 너무 오래 우리는 상호 참조의 모든 아는 한,이 쿼리를 구성 할 수 있습니다 식별자들, 예. Foo, Bar, 1, 2, 3, 45이다. 이러한 종류의 변환을 수행하려는 대부분의 경우 이러한 값을 모두 알지 못하므로 SQL은 변환을 수행하는 방법이 아닙니다. 이러한 형식의 재 형식화를 수행하기 위해 원래 결과를 사용하는 도구를 사용하십시오.

관련 문제