sql - 将多个行值更新为同一行和不同列

标签 sql sql-server t-sql sql-update

我试图从另一个表更新表列。

Person Table

person表中,可以有多个具有相同inst_id的联系人。

我有一个 firm 表,其中包含 person 表中最新的 2 条联系方式。

我期望的firm表格如下:

Firm Table

如果只有一个联系人,请更新 person1email1。如果有 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)。

Sample SQL Fiddle

关于sql - 将多个行值更新为同一行和不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27101813/

相关文章:

mysql - 在mysql中设置varchar()的最大大小有什么意义?

sql - 如何在 VBA 中将整数值传递到 SQL 查询

sql-server - Entity Framework Core 与 ASP.NET Core Web API 和 SQL Server (+ Xamarin.Forms)

sql-server - 如何将值传递给OLE DB Source组件中的存储过程参数?

t-sql - 就像与参数一起使用一样,无法正常工作

sql - 我应该在 T-SQL 字符串中转义哪些特殊字符?

sql - 在sql中使用多个pivot将行转换为列

c# - 如何更新用户?

sql - 使用内部连接更新多个表

sql - 检查 SQL Server 中的重复数据