Sql 如何使用增加的间隔值更新列?

Sql 如何使用增加的间隔值更新列?,sql,postgresql,Sql,Postgresql,我在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

我在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;

我该怎么做?

使用窗口函数
行号
将处理
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;

使用窗口函数
行号
将处理
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;

如果您的ID是连续的,那么基本上这是最简单也是最有效的方法:

UPDATE table set qty = qty+id; 

如果您的ID是连续的,那么基本上这是最简单也是最有效的方法:

UPDATE table set qty = qty+id; 

如果列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

在给定的分区内为每一行分配唯一的编号 按条款订货


如果列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

在给定的分区内为每一行分配唯一的编号 按条款订货


事实并非如此。可以删除行。但不应使用lad的答案。它们不是。可以删除行。但不应使用lad的答案。