我有以下表结构。

我只想将 SubId 更新为所有行,其中 RawLineNumber 升 1, SeqNumber 升 1。

RawlineNumber Claimid SubId SeqNumber
1             6000    A100  1
2             6000    NULL  2
3             6000    NULL  3
10            6000    A200  1
11            6000    NULL  2
25            6000    A300  1
26            6000    NULL  2
27            6000    NULL  3

我要更新
SubId of RawLineNumber 2 和 3 与 A100,
SubId of RawLineNumber 11 with A200,
SubId of RawLineNumber 26 和 27 与 A300。

我有一个可以完成这项工作的游标,但我可以有一个 CTE 来处理它吗?

最佳答案

UPDATE  m
SET     subid = q.subid
FROM    mytable m
CROSS APPLY
        (
        SELECT  TOP 1 subid
        FROM    mytable mi
        WHERE   mi.rawLineNumber  < m.rawLineNumber
                AND mi.subid IS NOT NULL
        ORDER BY
                rawLineNumber DESC
        ) q
WHERE   m.subid IS NULL

关于sql-server-2005 - 使用 CTE 代替 Cursor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6734369/

10-11 05:21