2017-10-06 6 views
0

ich auf einer Aufgabe arbeitete Spalten zu aktualisieren, die in einer Spalte Duplikat-IDs haben screenshotSQL Server doppelte update ID andere Spalten

wie können wir Spalte nur DrugLabelName aktualisieren? Ich muss old_drug_name mit new_drug_name mit der doppelten ID 00004029830 aktualisieren?

Bitte geben

+1

Woher wissen Sie, welches das alte ist und welches das neue? –

+0

Werden die alten Namen immer eine niedrigere INTid haben? – Scath

+0

wir kennen das alte und neue basierend auf INTid, wenn ein Datensatz maximal INTid hat, dann ist es neuer – shivareddy

Antwort

1

Wenn Sie alle Zeilen mit dem gleichen id wollen den gleichen Namen haben, können Sie Fensterfunktionen verwenden:

with toupdate as (
     select t.*, 
      first_value(druglabelname) over (partition by id order by intid desc) as new_druglabelname 
     from t 
    ) 
update toupdate 
    set druglabelname = new_druglabelname 
    where druglabelname <> new_druglabelname; 
0

Wie wäre es?

 CREATE TABLE tbl 
     (INTid int 
     ,ID varchar (20) 
     ,DrugLabelName varchar(200) 
     ) 

    INSERT tbl (INTid, ID, DrugLabelName) 
    SELECT 137272, '00004029830', 'old_drug_name' 

    INSERT tbl (INTid, ID, DrugLabelName) 
    SELECT 1668177, '00004029830', 'New_drug_name' 

    INSERT tbl (INTid, ID, DrugLabelName) 
    SELECT 1668178, '00004029831', 'Other_drug_name' 

    GO 

    UPDATE t 
    SET DrugLabelName = x.DrugLabelName 
    FROM tbl AS t 
    INNER JOIN tbl as x 
     ON t.ID = x.id 
     AND x.INTid > t.INTid 

    SELECT * 
    FROM tbl 

    DROP TABLE tbl