小编典典

如何在DB2中透视表?

sql

我在下面的表A中,对于每个唯一的ID,都有三个带有某些值的代码。

 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

我有第二个表B,其格式如下:

Id   Code1_Val   Code2_Val    Code3_Val

每个唯一ID仅一行。我想为第一个表中的每个ID填充第一个表A中的第二个表B。

对于上面的第一个表A,第二个表B应该显示为:

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

如何在单个SQL查询中实现此目标?


阅读 192

收藏
2021-05-05

共1个答案

小编典典

如果您的版本没有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 Fiddle示例)。

2021-05-05