我如何在DB2中透视表?

Vic*_*cky 6 sql db2

我在下面有表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
Run Code Online (Sandbox Code Playgroud)

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

Id   Code1_Val   Code2_Val    Code3_Val
Run Code Online (Sandbox Code Playgroud)

每个唯一ID只有一行.我想从第一个表A中为第一个表中的每个id填充第二个表B.

对于上面的第一个表A,第二个表B应该如下:

Id   Code1_Val   Code2_Val    Code3_Val
---------------------------------------------
11       x          y             z
12       p          q             r
13       l          m             n
Run Code Online (Sandbox Code Playgroud)

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

小智 7

   select Id,                                              
      max(case when Code = '1' then Value end) as Code1_Val,  
      max(case when Code = '2' then Value end) as Code2_Val,  
      max(case when Code = '3' then Value end) as Code3_Val   
      from TABLEA                                     
      group by Id                                            
Run Code Online (Sandbox Code Playgroud)


Clo*_*use 3

如果你的版本没有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
Run Code Online (Sandbox Code Playgroud)

(适用于我的 V6R1 DB2 实例,并且有一个SQL Fiddle 示例)。