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

时间:2016-01-14 11:46:27

标签: 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 1)  order by id asc;

我该怎么做?

3 个答案:

答案 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

ROW_NUMBER()

  

为PARTITION中的每一行指定唯一的数字   ORDER BY子句

答案 2 :(得分:1)

如果您的身份证持续存在,基本上是最简单的方式,也是最有效的方式:

UPDATE table set qty = qty+id;