2017-10-06 20 views
0

我工作的一個任務來更新其有重複的ID在列 screenshotSQL服務器的副本ID的更新等欄目

我們如何能夠更新列只DrugLabelName列?我需要使用重複ID爲00004029830的new_drug_name更新old_drug_name?

請告知

+1

你怎麼知道哪個是舊的,哪個是新的? –

+0

舊的名稱總是會有一個較低的INTID? – Scath

+0

我們將基於INTid來了解新舊基礎,如果一條記錄有最大的INTid,那麼它是較新的 – shivareddy

回答

1

如果你想用相同的id所有行具有相同的名稱,你可以使用窗口功能:

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