在sql server中进行高效更新

jv4diomz  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(324)

我正在寻找一种有效的方法来更新sql server中的数据,我想更新数据 id-B,id-C, and other 如果状态来自 id-AA ,我不知道此条件的update语句。
我需要处理很多记录。
这是我的例子:

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

如何建立结果?
谢谢您

z4bn682m

z4bn682m1#

使用可更新的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;

演示

这里的策略是计算 Id 记录,记录 Id 结束于 -A 还有 Status 碰巧是 A . 然后我们对所有人的状态进行更新 Id 此计数大于零的记录。

相关问题