2016-10-24 2 views
1

피벗을 사용하여 행을 열로 변환하려고합니다. 열이 두 개인 경우이를 수행 할 수 있습니다. 테이블에 2 개 이상의 열이있는 경우 피벗 할 수 있습니까? 예를 들어행을 두 개 이상의 열로 변환 SQL Server

:

C1 C2  C3 
________________________ 
    A 10  1000 
    B 20  1000 
    C 30  1500 

예상 출력 :

A   B  C 
10  20  30 
1000  1000  1500 
+0

https://blogs.msdn.microsoft.com/kenobonn/2009/03/22/pivot-on-two-or-more-fields- in-SQL-server / –

답변

0

이 난 복잡한 CTE의

WITH cte 
     AS (SELECT Max(a) a, 
        Max(b) b, 
        Max(c) c 
      FROM (SELECT * 
        FROM #Table1)a 
        PIVOT (Avg(c2) 
          FOR c1 IN (a, 
            b, 
            c)) AS c), 
     c2 
     AS (SELECT Max(a) a, 
        Max(b) b, 
        Max(c) c 
      FROM (SELECT * 
        FROM #Table1)a 
        PIVOT (Avg(c3) 
          FOR c1 IN (a, 
            b, 
            c)) AS c3) SELECT * 
    FROM cte 
    UNION ALL 
    SELECT * 
    FROM c2 
0

을 하나의 피벗으로 시도 대신 사용 할 수도있는 하나의 방법입니다 PIVOT과 테이블 값 생성자를 사용하는 간단한 방법은 다음과 같습니다

,
CREATE TABLE myTable 
    ([C1] varchar(1), [C2] int, [C3] int) 
; 

INSERT INTO myTable 
    ([C1], [C2], [C3]) 
VALUES 
    ('A', 10, 1000), 
    ('B', 20, 1000), 
    ('C', 30, 1500) 
; 


SELECT [A],[B],[C] 
FROM (
     SELECT ca.* 
     FROM myTable mt 
       CROSS APPLY (VALUES(mt.C1, 1, mt.C2),(mt.C1, 2, mt.C3)) ca(col, rn, val) 
     ) t 
PIVOT (
    MAX(val) 
    FOR col IN ([A],[B],[C]) 
) p 

교차 열마다 새로운 행을 생성한다 적용 (C2, C3)는 col PIVOT 결합되지 않도록 (A는 B, C) rn이 값을 구분 단지 ROWNUMBER 값 인 C1 값인 그들과 그냥 MAX를 선택하고 val 그냥 C2와 C3 값입니다

관련 문제