我在下面的表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查询中实现此目标?
如果您的版本没有DECODE(),您也可以使用以下命令:
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示例)。