我有下表的逐项发票,其中重复的行号需要重新编号。我需要遍历每张发票并对行号重新编号,以便行号可以读取1,2,3,4等等。
我使用以下查询更新了一张发票:
DECLARE @counter int
SET @counter = 0
UPDATE Invoice_Itemized
SET @counter = LineNum = @counter + 1
WHERE Invoice_Number = 619558
如何更新发票明细表中包含重复行号的所有发票?
目前我的表看起来像Image 1,并希望在运行查询后看起来像Image 2。
答案 0 :(得分:0)
ROW_NUMBER()
窗口函数为每个指示的分区提供一个非重复的增量编号。请尝试以下方法:
;WITH NewInvoiceLineNumber AS
(
SELECT
I.*,
NewLineNumber = ROW_NUMBER() OVER (
PARTITION BY
I.Invoice_Number
ORDER BY
I.LineNum ASC,
I.ItemNum ASC)
FROM
ItemizedInvoices AS I
)
UPDATE I SET
LineNum = NewLineNumber
FROM
NewInvoiceLineNumber AS I
要在执行更新之前验证结果,您可以更改UPDATE
的{{1}}。
SELECT