SQL: указание дублирующих данных - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть таблица A

ID col1 col2 status
1  ABC  123   NULL
2  ABC  214   NULL
3  BCA  001   NULL
4  ABC  123   NULL
5  BWE  765   NULL
6  ABC  123   NULL
7  BCA  001   NULL

Я хочу пометить дубликаты данных (col1, col2) и заполнить столбец = status сообщением, идентификатором которого является дубликат. Например, ID = 4 является дубликатом ID = 1, ID = 6 является дубликатом ID = 1, а ID 7 является дубликатом ID = 3. status = "Дубликат идентификатора = (идентификатор здесь)" Ожидаемый результат:

    ID col1 col2  status
    1  ABC  123   NULL
    2  ABC  214   NULL
    3  BCA  001   NULL
    4  ABC  123   Duplicate of ID = 1
    5  BWE  765   NULL
    6  ABC  123   Duplicate of ID = 1
    7  BCA  001   Duplicate of ID = 3

Я могу пометить дубликаты, но не могу указать на идентификационные номера. Сценарий, который я использовал:

WITH CTE_Duplicates1 AS
  (SELECT ROW_NUMBER() OVER (PARTITION BY col1,col2 
    ORDER BY (SELECT 0)) RN,Status
  FROM tableA 
  )
 UPDATE CTE_Duplicates1
 SET qnxtStatus = 'Duplicate of ID ='
 WHERE RN<>1 

Пожалуйста, исправьте. Спасибо

1 Ответ

2 голосов
/ 10 сентября 2011
;WITH CTE_Duplicates1 AS
(
SELECT MIN(ID) OVER (PARTITION BY col1, col2) Mn,
       ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY ID) Rn,
       *
FROM tableA       
)
UPDATE CTE_Duplicates1
SET qnxtStatus = 'Duplicate of ID =' + CAST(Mn AS VARCHAR(11))
WHERE Rn > 1
...