2015-12-21 43 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 
)