我有一個包含三列 A、B 和狀態的表。

首先,我過濾表以僅獲取重復值
使用這個查詢
SELECT A
FROM Table_1
GROUP BY A
HAVING COUNT(A) >1
輸出 :

在第二步中,我需要檢查 B 列是否有重復值,如果有重復,我需要將狀態更新為 D。

我試試這個查詢
UPDATE Table_1
SET status = 'D'
WHERE exists
(SELECT B
FROM Table_1
GROUP BY B
HAVING COUNT(B) >1)
但它更新了所有行。

uj5u.com熱心網友回復:
您可以使用可更新的 CTE 執行此操作,而無需使用視窗化COUNT
WITH d AS (
SELECT *,
cnt = COUNT(*) OVER (PARTITION BY a, b)
FROM t
)
UPDATE d
SET status = 'D'
WHERE cnt > 1;
uj5u.com熱心網友回復:
以下執行您需要使用row_number識別具有重復項的任何組和可更新的 CTE 以檢查屬于具有重復項的組的任何行的任何行:
with d as (
select *, row_number() over(partition by a,b order by a,b) dn
from t
)
update d set d.status='D'
where exists (select * from d d2 where d2.a=d.a and d2.b=d.b and d2.dn>1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/333471.html
標籤:sql sql-server 查询语句 重复
上一篇:將JSON元素轉換為SQL表格式
