2017-10-06 10 views
0

私はどのように我々は列のみDrugLabelNameを更新することができ欄に screenshotSQL Serverの重複したIDの更新、他の列

を重複したIDを持つ列を更新するためのタスクに取り組んでいましたか?私は古いID00004029830を使用してnew_drug_nameでold_drug_nameを更新する必要がありますか?あなたは同じidを持つすべての行が同じ名前を持つようにしたい場合は

+1

どのようなものが古いのか、新しいものはどのように分かりますか? –

+0

古い名前はいつもより低いINTidを持っていますか? – Scath

+0

レコードが最大INTidを持つ場合、古いものと新しいものがINTidに基づいています。 – shivareddy

答えて

1

を教えてください、あなたはウィンドウ関数を使用することができます。

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

いかが?

 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