我有一个包含3列的表格。想要更新sql中每个PId的订单列。需要一个更新语句来得到以下结果。任何帮助赞赏。
ID PId Order
1 2 0
2 2 0
3 2 0
4 3 0
5 3 0
6 4 0
7 4 0
8 5 0
9 5 0
10 6 0
11 6 0
12 6 0
结果将为
ID PId Order
1 2 1
2 2 2
3 2 3
4 3 1
5 3 2
6 4 1
7 4 2
8 5 1
9 5 2
10 6 1
11 6 2
12 6 3
哪个订单的编号与PID列有关。
答案 0 :(得分:0)
如果您使用的是SQL Server 2005或更高版本,则可以使用以下命令:
Select
PId,
Row_Number() Over (Partition By PId Order By PId) As [Order]
From
orders
答案 1 :(得分:0)
根据您的更新:
UPDATE t
SET order = new_order
FROM t
INNER JOIN
(SELECT id, RANK() OVER(PARTITION BY pid ORDER BY id) AS new_order
FROM t) sub ON t.id = sub.id
答案 2 :(得分:0)
因为其他答案似乎假设SQL Server,所以该数据库中的最佳方式是:
with topdate as (
select t.*, row_number() over (partition by pid order by id) as new_order
from t
)
update toupdate
set [Order] = new_order;