1. ホーム
  2. sql

[解決済み] DB2でテーブルをPivotする方法は?[重複]する

2022-02-16 06:11:37

質問

以下のテーブルAには、それぞれのユニークIDに対して、何らかの値を持つ3つのコードがあります。

 ID    Code    Value
---------------------
 11       1       x
 11       2       y
 11       3       z
 12       1       p
 12       2       q
 12       3       r
 13       1       l
 13       2       m
 13       3       n

2つ目のテーブルBは、以下のようなフォーマットで用意されています。

Id   Code1_Val   Code2_Val    Code3_Val

ここでは、ユニークなIDごとに1つの行があるだけです。最初のテーブルAから2番目のテーブルBに、最初のテーブルの各IDを入力したいのです。

上記の第一テーブルAに対して、第二テーブルBは次のように出てくるはずです。

Id   Code1_Val   Code2_Val    Code3_Val
---------------------------------------------
11       x          y             z
12       p          q             r
13       l          m             n

これを1つのSQLクエリで実現するにはどうしたらよいでしょうか?

どのように解決するのですか?

もし、あなたのバージョンに DECODE() を使用することもできます。

INSERT INTO B (id, code1_val, code2_val, code3_val)  
WITH Ids (id) as (SELECT DISTINCT id
                  FROM A) -- Only to construct list of ids

SELECT Ids.id, a1.value, a2.value, a3.value
FROM Ids -- or substitute the actual id table
JOIN A a1
     ON a1.id = ids.id
        AND a1.code = 1
JOIN A a2
     ON a2.id = ids.id
        AND a2.code = 2
JOIN A a3
     ON a3.id = ids.id
        AND a3.code = 3

(私のV6R1 DB2インスタンスで動作し、かつ SQLフィドル例 ).