Sql 如何在oracle中合并两行

Sql 如何在oracle中合并两行,sql,oracle,merge,sql-update,Sql,Oracle,Merge,Sql Update,我有一个有多条记录的表。一条记录有一些数据,另一条记录有一些数据和更新的数据 身份证件 名称 性别 生日 住址 薪水 1. 约翰 无效的 无效的 纽约 无效的 2. 德奥 男性的 1980 无效的 5000 如果要对最新id进行优先级排序: select distinct last_value(name ignore nulls) over (order by id desc) as name, last_value(gender ignore nulls) over

我有一个有多条记录的表。一条记录有一些数据,另一条记录有一些数据和更新的数据

身份证件 名称 性别 生日 住址 薪水 1. 约翰 无效的 无效的 纽约 无效的 2. 德奥 男性的 1980 无效的 5000
如果要对最新id进行优先级排序:

select distinct
       last_value(name ignore nulls) over (order by id desc) as name,
       last_value(gender ignore nulls) over (order by id desc) as gender,
       last_value(birthday ignore nulls) over (order by id desc) as birthday,
       last_value(address ignore nulls) over (order by id desc) as address,
       last_value(salary ignore nulls) over (order by id desc) as salary
from t;

您应该能够使用这些语句清理额外的记录ID 2。只需确保将下面语句中的_表替换为实际的表名即可

更新您的表t1 设置名称, 性别 生日 住址 薪水= 选择nvlt2.name,t1.name, nvlt2.gender,t1.gender, nvlt2.生日,t1.生日, nvlt2.address,t1.address, nvlt2.薪水,t1.薪水 从您的表t2 其中t2.id=2 其中t1.id=1; 从您的表中删除 其中id=2;
如果要对id=2进行优先级排序,为什么希望id=1?如果一列中有多行具有非空值(如名称),则规则是什么?id的规则是什么?如果不止一行具有非null,我更喜欢更新的一个id=2,并且id是主键,那么整个事情就没有意义了。如果输入的ID=3,Name='Jhon Bug',其他列中的数据不同怎么办?您如何知道ID=1必须与ID=2配对和更新,而不是与ID=3配对和更新?“我看不出你怎么能合理地解决这种问题。@mathgut我知道我的数据。项目从manuel数据开始,但我们构建了一个集成,一些复杂的数据出现在我的表格中。我想使用旧的记录,我想得到新的数据。所以我需要合并旧的和新的。这不是零意义。这是我不想选择查询的情况。我想更新id=1并删除id=2银行!它起作用了