我在Postgresql中有一个表:
id qty
1 10
2 11
3 18
4 17
我想从1开始为每一行添加一个数字 我想要的意思是:
id qty
1 11 / 10+1
2 13 /11 +2
3 21 /18 +3
4 21 /17+4
第一行获得+1,第二行获得+2,第三行获得+3等......
应该是这样的:
update Table_a set qty=qty+(increased number starting from 1) order by id asc;
我该怎么做?
答案 0 :(得分:2)
使用窗口函数ROW_NUMBER
将处理id
中的差距:
CREATE TABLE Table_a(id INT PRIMARY KEY, qty INT);
INSERT INTO Table_a(id, qty)
SELECT 1 , 10
UNION ALL SELECT 2 , 11
UNION ALL SELECT 3 , 18
UNION ALL SELECT 4 , 17;
WITH cte AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY id) AS r
FROM Table_a
)
UPDATE Table_a AS a
SET qty = a.qty + c.r
FROM cte c
WHERE c.id = a.id;
SELECT *
FROM table_a;
答案 1 :(得分:2)
如果列ID是唯一的,那么您可以使用以下方式
UPDATE Table_a a
SET qty = qty + b.rn
FROM (
SELECT id,ROW_NUMBER() OVER (ORDER BY id) rn
FROM Table_a
) b
WHERE a.id = b.id
为PARTITION中的每一行指定唯一的数字 ORDER BY子句
答案 2 :(得分:1)
如果您的身份证持续存在,基本上是最简单的方式,也是最有效的方式:
UPDATE table set qty = qty+id;