我试图从另一个表更新表列。
在person
表中,可以有多个具有相同inst_id
的联系人。
我有一个 firm
表,其中包含 person
表中最新的 2 条联系方式。
我期望的firm
表格如下:
如果只有一个联系人,请更新 person1
和 email1
。如果有 2 个,则更新两者。如果有3个,则丢弃第3个。
有人可以帮我解决这个问题吗?
最佳答案
这应该有效:
;with cte (rn, id, inst_id, person_name, email) as (
select row_number() over (partition by inst_id order by id) rn, *
from person
)
update f
set
person1 = cte1.person_name,
email1 = cte1.email,
person2 = cte2.person_name,
email2 = cte2.email
from firm f
left join cte cte1 on f.inst_id = cte1.inst_id and cte1.rn = 1
left join cte cte2 on f.inst_id = cte2.inst_id and cte2.rn = 2
公共(public)表表达式 (cte) 用作 person 表中更新编号行的源,按 inst_id 分区,然后更新连接 cte 两次(对于前 1 和前 2)。
关于sql - 将多个行值更新为同一行和不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101813/