2015-12-21 44 views
1

我遇到查询问题。我试图找到答案,但找不到它。查询基于另一个行更新一行

我有2行为我的表中的一些雇员。我想保留最近的那些,并删除旧的..但在此之前,我想更新来自同一员工的旧行数据中的新行的空列。例如。

enter image description here

我想更新ID号为1和3,以便只有空列被更新和非空列不更新,从而使数据变得

输出应该是这样的:

enter image description here

我可以在最后删除重复项,因为旧数据的ID是已知序列。

请帮忙!谢谢!

+1

添加唯一约束的employee_no。 (这不会再发生......) – jarlh

+0

发生这种情况是因为我正在将某些其他数据库的数据集成到我的数据库中。 – Umar

回答

1

你可以尝试这样的:

UPDATE EMP1 
SET 
    Name = CASE 
       WHEN EMP2.Name IS NULL THEN EMP2.Name 
      END 
FROM 
    Employee AS EMP1 
    INNER JOIN Employee AS EMP2 ON EMP1.Employee_no = EMP2.Employee_no AND EMP1.ID <> EMP2.ID 
+0

SQL命令没有正确结束错误:( – Umar

+0

你有什么类型的数据库?MSSQL,Oracle,MySQL?有些语义可能在更新子句中有所不同(此解决方案特定于MSSQL) – tvmannetjie

+0

即时通讯使用oracle:\ – Umar

0

您可以对其进行更新:

UPDATE employee e 
set dob = (
    select db from (
    select dob 
      over (partition by dob order by employeeno) db 
    from employee 
) ee 
    where ee.employeeno = e.employeeno 
)