2017-10-06 19 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