交换 2 个表的列值
swapping the column value of 2 tables
您好,我有 2 个表 tab1
和 tab2
。我想用 tab2
的 id
列替换 tab1
的 id
列。我可以在单个 select
查询中完成吗?
输入:
Tab1
id name
101 AA
102 BB
102 CC
Tab2
id Name
11 XX
12 YY
13 ZZ
输出应该是
Tab1
id Name
11 AA
12 BB
13 CC
Tab2
id name
101 XX
102 YY
103 ZZ
谢谢
安卡
您确定 Tab2 的最后一行是 102, 'ZZ'
或 103, 'ZZ'
(即 id 不同且有序)。
如果是 103, 'ZZ'
,则以下查询有效:
select decode(sign(max(ascii(name))-77),-1, min(id), max(id)) id, name
from
(
select t1.id, t1.dr, t2.name from
(
select id, dense_rank() over (order by id) dr from Tab1
union all
select id, dense_rank() over (order by id) dr from Tab2
) t1
join
(
select name, dense_rank() over (order by id) dr from Tab1
union all
select name, dense_rank() over (order by id) dr from Tab2
) t2 on ( t1.dr = t2.dr )
)
group by name;
您好,我有 2 个表 tab1
和 tab2
。我想用 tab2
的 id
列替换 tab1
的 id
列。我可以在单个 select
查询中完成吗?
输入:
Tab1
id name
101 AA
102 BB
102 CC
Tab2
id Name
11 XX
12 YY
13 ZZ
输出应该是
Tab1
id Name
11 AA
12 BB
13 CC
Tab2
id name
101 XX
102 YY
103 ZZ
谢谢 安卡
您确定 Tab2 的最后一行是 102, 'ZZ'
或 103, 'ZZ'
(即 id 不同且有序)。
如果是 103, 'ZZ'
,则以下查询有效:
select decode(sign(max(ascii(name))-77),-1, min(id), max(id)) id, name
from
(
select t1.id, t1.dr, t2.name from
(
select id, dense_rank() over (order by id) dr from Tab1
union all
select id, dense_rank() over (order by id) dr from Tab2
) t1
join
(
select name, dense_rank() over (order by id) dr from Tab1
union all
select name, dense_rank() over (order by id) dr from Tab2
) t2 on ( t1.dr = t2.dr )
)
group by name;