对于sql中相同的产品ID,更新一个以1开头的连续数字的列

时间:2018-01-05 23:06:17

标签: sql

我有一个包含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列有关。

3 个答案:

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

在此测试:http://rextester.com/IJGT34576

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