0

次の表があり、名前が重複しているレコードの1つだけについて、削除された列の値をゼロに設定したいと思います。

id     name      deleted
------------------------
1      a         1
2      a         1
3      a         1
4      b         1
5      c         1
6      d         1

したがって、出力は次のようになります。

id     name      deleted
------------------------
1      a         0
2      a         1
3      a         1
4      b         0
5      c         0
6      d         0
4

3 に答える 3

3

dbmsがSQL-Server(> = 2005)の場合、次のコマンドを使用できCTEますROW_NUMBER

WITH CTE AS
(
   SELECT ID, Name, Deleted,
     RN = ROW_NUMBER() OVER(PARTITION BY name ORDER BY ID)
   FROM dbo.T
)
UPDATE CTE 
SET Deleted = 0
WHERE RN = 1

デモ

于 2013-01-16T16:47:46.110 に答える
1
UPDATE Tbl SET deleted = 0 WHERE id IN
(SELECT MIN(id) FROM Tbl GROUP BY name)
于 2013-01-16T16:49:03.233 に答える
0
UPDATE A
SET A.deleted = 0
FROM Tbl A
   LEFT JOIN Tbl B
     ON A.Name = B.Name
        AND A.Id > B.Id
WHERE B.Id IS NULL
于 2013-01-16T16:43:14.007 に答える