我在下面有表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)
如果你的版本没有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 示例)。
| 归档时间: |
|
| 查看次数: |
34315 次 |
| 最近记录: |