2016-01-14 64 views
0

我有一個表PostgreSQL中有:如何更新列間隔vlaue?

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; 

我該怎麼做?

回答

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()

指定唯一的編號給出的 順序分區中的每一行BY子句

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

如果你的ID是不斷,除了基本的最簡單的方法來做到這一點,最有效的一個:

UPDATE table set qty = qty+id; 
+0

他們不是。可以刪除行。 – java

+1

比你應該使用小夥子的答案。 – sagi