通过使用行号,我通过对它们进行分组来分配一些列。基本上查询如下。
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
答案 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
答案 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 **