我在下面有表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只有一行。我想从第一个表A中为第一个表中的每个id填充第二个表B.
对于上面的第一个表A,第二个表B应该表示为:
Id Code1_Val Code2_Val Code3_Val
---------------------------------------------
11 x y z
12 p q r
13 l m n
如何在单个SQL查询中实现此目的?
答案 0 :(得分:6)
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
答案 1 :(得分:2)
如果您的版本没有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 Example)。
答案 2 :(得分:1)
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
答案 3 :(得分:0)
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
答案 4 :(得分:0)
这是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 ;
答案 5 :(得分:0)
MKIMAGEOUTPUT_SPL = SPL.log
答案 6 :(得分:-1)
您想要透视数据。由于DB2没有pivot函数,你可以使用Decode(基本上是一个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