Sql 如何使用增加的间隔值更新列?
我在Postgresql中有一个表,其中包含: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
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的答案。