2017-01-18 6 views
0

私は次の図のようにテーブルを変換するSQL Serverのクエリを把握する必要があります。テーブルを変換するT-SQLクエリ

TABLE PICTURE

+0

は、データベースエンジンのために本当に適していない何かのように聞こえる – Lamak

+0

私はそれがPIVOT機能やその他の技術を用いて行うことができると思います... –

+1

ようこそstackoverflowへ。 [ask]をお読みください。 –

答えて

1

これは、あなたが探しているものかもしれません:

DECLARE @t TABLE(Col1 char(1) 
       ,Col2 char(1) 
       ,Col3 char(1) 
       ,ColKey varchar(3) 
       ,ColVal1 varchar(2) 
       ,ColVal2 varchar(3) 
       ); 

INSERT INTO @t VALUES('A','B','C','EOP','X1','X2') 
        ,('A','B','C','AVG','X3','X4') 
        ,('A','B','C','PL','X5','X6') 
        ,('A','B','E','EOP','X7','X8') 
        ,('A','B','E','PL','X9','X10'); 


WITH cte_val1 AS(
SELECT Col1, Col2, Col3, [EOP] [EOP Val1], [AVG] [AVG Val1], [PL] [PL Val1] 
    FROM 
    (
    SELECT Col1, Col2, Col3, ColKey, ColVal1 
     FROM @t 
) src 
    PIVOT(
    MIN(ColVal1) FOR ColKey IN ([EOP], [AVG], [PL]) 
) piv 
), 
cte_val2 AS(
SELECT Col1, Col2, Col3, [EOP] [EOP Val2], [AVG] [AVG Val2], [PL] [PL Val2] 
    FROM 
    (
    SELECT Col1, Col2, Col3, ColKey, ColVal2 
     FROM @t 
) src 
    PIVOT(
    MIN(ColVal2) FOR ColKey IN ([EOP], [AVG], [PL]) 
) piv 
) 
SELECT cv1.Col1, cv1.Col2, cv1.Col3 
     ,cv1.[EOP Val1], cv2.[EOP Val2] 
     ,cv1.[AVG Val1], cv2.[AVG Val2] 
     ,cv1.[PL Val1], cv2.[PL Val2] 
    FROM cte_val1 cv1 
    JOIN cte_val2 cv2 
    ON cv1.Col1 = cv2.Col1 
    AND cv2.Col2 = cv1.Col2 
    AND cv2.Col3 = cv1.Col3 
+0

ありがとうございました。チェックします。 –

関連する問題