2016-02-09 139 views
1

我有一臺這樣的如何在Teradata中使用ROW_NUMBER()更新列?

Create table test1(emp_id decimal(5,0), emp_name varchar(20)); 

Insert into test1(2015,'XYZ'); 
Insert into test1(2016,'XYZ2'); 

現在我想更新EMP_ID到ROW_NUMBER() 或 添加新的列到同一個表像(EMP_NO一個整數)的ROW_NUMBER()。

任何人都可以告訴我這個查詢嗎?

回答

1

您需要使用UPDATE FROM:

UPDATE test1 
FROM 
(SELECT ROW_NUMBER() OVER (ORDER BY emp_id) AS rn, 
    emp_id 
    FROM test1 
) AS src 
SET emp_id = src.rn 
WHERE test1.emp_id = src.emp_id -- must be unique column(s) 

順便說一句,而不是更新表的所有行它可能是更好的INSERT/SELECT或合併SELECT到一個新表。你必須這樣做,如果沒有唯一的列,你應該如果emp_id是你的表的PI(否則表現將是可怕的)。

+0

非常感謝你的回覆。我還有一個疑問,如果我有相同的列emp_id具有'空'價值或像1所有行相同的值,查詢是什麼?你能告訴我嗎? –

+0

@VivekHarry:如果有重複行無法更新,您需要一個新表加上插入/選擇。對於單個NULL,您可以添加'WHERE test1.emp_id = src.emp_id或(test1.emp_id爲null且src.emp_id爲null)' – dnoeth

+0

謝謝sooo much buddyyyyy;)它的工作 –

1
Create table test1(
    emp_id decimal(5,0), 
    emp_name varchar(20), 
    emp_no INTEGER GENERATED ALWAYS AS IDENTITY 
     (START WITH 1 
      INCREMENT BY 1 
     ) 
); 

Insert into test1(2015,'XYZ1',2); 
Insert into test1(2016,'XYZ2',2);  
Insert into test1(2015,'XYZ3',null); 
Insert into test1(2016,'XYZ4',null);  
+0

非常感謝你,但我想更新一個非唯一的列到IDENTITY值像(1,2,3,..) –

+0

我不認爲身份允許非唯一值。身份本身可以是可更新的(默認是子句)或自動生成的(總是子句)。 –

+0

實際上在Teradata中我可以將標識列添加到現有表中,我該如何實現這一目標?請有人告訴我嗎? –

相關問題