我有一个表,其中有两种类型的id和一个值。我需要用相同id的值更新所有为null的值。例如
输入
aid no bid
A 1 1
A 2 NULL
A 3 NULL
B 1 NULL
B 2 2
B 3 NULL
在上表中,我需要更新以A作为键的所有行的A的值1,而对于B我需要更新所有以键B的行的A的值1。
输出
A 1 1
A 2 1
A 3 1
B 1 2
B 2 2
B 3 2
我正在使用临时表来执行此操作,是否有一种更简单的方法可以不使用临时表来执行此操作?
select bid, aid
into #tempbidNULL
from table_name
where bid is null and aid is not null
select bid, aid
into #tempbidNOTNULL
from table_name where bid is not null
and aid in (select aid from #tempbidNULL)
update table_name
set bid = b.bid
from table_name x
join #tempbidNOTNULL y on x.aid = y.aid
where x.bid IS NULL
where y.bid IS NOT NULL
答案 0 :(得分:2)
我将使用窗口功能:
with toupdate as (
select t.*, max(val2) over (partition by col1) as new_val2
from table_name
)
update toupdate
set val2 = new_val2
where val2 is null;
答案 1 :(得分:0)
UPADTE table_name
SET b_id=CASE a_id WHEN 'A' THEN 1 WHEN 'B' THEN 2 END
WHERE b_id is null AND a_id is not null