如何使用SQL查询重新编号发票行号列表(SQL Server 2012)

时间:2018-03-27 23:57:02

标签: sql-server sql-server-2012

我有下表的逐项发票,其中重复的行号需要重新编号。我需要遍历每张发票并对行号重新编号,以便行号可以读取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。

Image1

Image2

1 个答案:

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