여기는 이고 대답은입니다. 내 의견에 언급했듯이,이 작업은 당신이 작업하고있는 차원에서만 작동합니다. 첫째, 샘플 데이터 :
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
, 4
및 5
이다. 이러한 종류의 변환을 수행하려는 대부분의 경우 이러한 값을 모두 알지 못하므로 SQL은 변환을 수행하는 방법이 아닙니다. 이러한 형식의 재 형식화를 수행하기 위해 원래 결과를 사용하는 도구를 사용하십시오.
당신은'PIVOT'에 이어'UNPIVOT'을 할 수 있습니다. 그러나 항상 그렇듯이 그것은 고정 된 크기에서만 작동합니다. 그리고 언제나 그렇듯이 질문을해야합니다 : SQL에서 보고서 형식을 지정하는 이유는 무엇입니까? 행과 열은 SQL에서 * 같은 것이 아닙니다 *. –
원본 테이블에 열이 2 개만있는 경우 피벗을 사용하여이 작업을 수행했습니다. 그러나 3 (또는 더 많은 열)에 대한 답변을 찾을 수 없습니다. –
빠른 응답을 보내 주셔서 감사합니다. 나는 SQL에서 꽤 새로운데 ... 어디서 포맷을해야합니까? –