sql-server-2005 - 使用 CTE 代替 Cursor

标签 sql-server-2005 tsql cursor common-table-expression cross-apply

我有以下表结构。

我只想更新子 ID 到所有为空和 的行原始行号 增加 1 并且 序列号 上升 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

我要更新
子 ID 原始行号 2 和 3 与 A100,
子 ID 原始行号 11 与 A200,
子 ID 原始行号 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/

相关文章:

sql-server-2005 - 从 cmd.exe 执行存储过程?

sql - 如何使用交叉应用的结果,可以实现在sql server中使用任何其他连接,如inner,left,right join

javascript - 显示 onFocus 和 hide 以及 onBlur 在 angular js 中组合的时间

oracle - ORA-12805 :parallel query server died unexpectedly

android - 如何获取字段值而不是列名?

sql - 有没有一种方法可以替换所有字段中的字符或字符串,而无需为每个字段编写?

sql-server-2005 - 为什么我们不能在递归CTE中使用外部联接?

SQL 查询根据聚合条件(列的总和)获取结果

sql - 在 SQL 中转置列和行的简单方法?

sql-server-2005 - 用另一个 SQL Server 表的值填充一个 SQL Server 表