我怎么可以透视表在DB2? [重复](How can I Pivot a table in DB

2019-07-04 03:59发布

这个问题已经在这里有一个答案:

  • 在DB2枢 3个回答

我有表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只有一行。 我想填充从第一个表中第二个表B中从第一个表中的每个ID。

对于上面的第一表A,第二表B中应该出来为:

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

我怎样才能在一个SQL查询实现这一目标?

Answer 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小提琴例 )。



Answer 2:

   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                                            


Answer 3:

SELECT Id,
max(DECODE(Code, 1, Value)) AS Code1_Val,
max(DECODE(Code, 2, Value)) AS Code2_Val,
max(DECODE(Code, 3, Value)) AS Code3_Val
FROM A
group by Id


Answer 4:

这里是一个SQLFiddle例子

insert into B (ID,Code1_Val,Code2_Val,Code3_Val)
select Id, max(V1),max(V2),max(V3) from
(
select ID,Value V1,'' V2,'' V3 from A where Code=1
union all
select ID,'' V1, Value V2,'' V3 from A where Code=2
union all
select ID,'' V1, '' V2,Value V3 from A where Code=3
) AG
group by ID


Answer 5:

这里是SQL查询:

insert into pivot_insert_table(id,code1_val,code2_val, code3_val) 
select * from (select id,code,value from pivot_table)
pivot(max(value) for code in (1,2,3)) order by id ;


Answer 6:

 WITH Ids (id) as 
 (
  SELECT DISTINCT id FROM A
  )
 SELECT Ids.id, 
 (select sub.value from A sub where Ids.id=sub.id and sub.code=1 fetch first rows only) Code1_Val,

 (select sub.value from A sub where Ids.id=sub.id and sub.code=2 fetch first rows only) Code2_Val,

 (select sub.value from A sub where Ids.id=sub.id and sub.code=3 fetch first rows only) Code3_Val
 FROM Ids


Answer 7:

要转动你的数据。 由于DB2没有旋转功能,哟可以使用解码(基本上是一个case语句。)

语法应为:

SELECT Id,
   DECODE(Code, 1, Value) AS Code1_Val,
   DECODE(Code, 2, Value) AS Code2_Val,
   DECODE(Code, 3, Value) AS Code3_Val
FROM A


文章来源: How can I Pivot a table in DB2? [duplicate]
标签: sql db2