在 SQL 服务器中高效更新

Efficient to Update in SQL Server

我正在寻找一种有效的方法来更新 SQL 服务器中的数据,如果来自 id-A 的状态是 A,我想更新数据 id-B,id-C, and other,我不知道这个条件的更新语句。
我需要处理很多记录。

这是我的例子:

   -------------------------------
   | Id     | Status|
   -------------------------------
   | 00001-A| A     |
   | 00001-B| I     |
   | 00001-C| I     |
   | 00002-A| A     |
   | 00002-B| I     |
   | 00003-A| I     |
   | 00003-C| I     |
   | 00004-A| I     |
   | 00005-A| A     |
   | 00005-D| I     |
   -------------------------------

这是我想要的结果:

-------------------------------
   | Id     | Status|
   -------------------------------
   | 00001-A| A     |
   | 00001-B| A     |
   | 00001-C| A     |
   | 00002-A| A     |
   | 00002-B| A     |
   | 00003-A| I     |
   | 00003-C| I     |
   | 00004-A| I     |
   | 00005-A| A     |
   | 00005-D| A     |

如何构建结果?
谢谢

使用可更新的 CTE:

WITH cte AS (
    SELECT *, COUNT(CASE WHEN RIGHT(id, 1) = 'A' AND Status = 'A' THEN 1 END) OVER
                  (PARTITION BY (SUBSTRING(id, 1, CHARINDEX('-', id) - 1))) cnt
    FROM yourTable
)

UPDATE cte
SET Status = 'A'
WHERE cnt > 0;

Demo

这里的策略是为每组 Id 记录计算 Id 何时结束于 -A 以及 Status 何时结束的计数是 A。然后,我们更新所有 Id 个计数大于零的记录的状态。