如何在 Teradata 中使用 ROW_NUMBER() 更新列?
How to UPDATE column with ROW_NUMBER() in Teradata?
我有一个 table 像这样
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()
要么
将新列添加到相同的 table 中,例如(emp_no 整数)到 row_number().
任何人都可以告诉我这个查询吗?
您需要使用更新自:
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)
顺便说一句,与其更新 table 的所有行, 可能 比 INSERT/SELECT 或将 SELECT 合并到一个新的行中更好table。如果没有唯一列,你必须做,如果emp_id
是你的table的PI,你应该(否则性能会很糟糕)。
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);
我有一个 table 像这样
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() 要么 将新列添加到相同的 table 中,例如(emp_no 整数)到 row_number().
任何人都可以告诉我这个查询吗?
您需要使用更新自:
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)
顺便说一句,与其更新 table 的所有行, 可能 比 INSERT/SELECT 或将 SELECT 合并到一个新的行中更好table。如果没有唯一列,你必须做,如果emp_id
是你的table的PI,你应该(否则性能会很糟糕)。
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);