row_number从最后一个数字开始?

时间:2014-06-10 16:37:24

标签: tsql row-number

通过使用行号,我通过对它们进行分组来分配一些列。基本上查询如下。

update product set row_number= CONVERT(nvarchar(255),  (ROW_NUMBER() over (partition by product.groupID order by product.groupID))) 

但现在有新产品,他们没有row_number(为null)。我无法重新分配所有row_numbers。我想通过使用最后一个数字继续分配null。 我该怎么办tsql。

基本上,根据下面的样本表。 D应为4,G应为3,H应为1.

 product row_number groupID
  A         1         1
  B         2         1
  C         3         1
  D        null       1
  E         1         2
  F         2         2
  G        null       2
  H        null       3

2 个答案:

答案 0 :(得分:1)

创建一个创建行号的CTE,然后使用CTE的结果更新product表。

;with cte(product, groupId, newRowNumber)
as(
select product, groupId, ROW_NUMBER() over (partition by product.groupID order by product.groupID, product.product)
from product 
)

update product
set row_number = newRowNumber
from cte
where cte.groupId = product.groupId 
and cte.product = product.product
and product.row_number is null

SQL Fiddle

答案 1 :(得分:0)

试试这个:

列表为 **(选择ID,ROW_NUMBER()over(groupid按groupid分区)作为产品的rn) 更新产品 set dbo.product.row_number = CONVERT(nvarchar(255),list.rn) 来自list的内部联接dbo.product.ID = dbo.product.ID **