Обновить повторяющиеся данные с тем же уникальным идентификатором - PullRequest
1 голос
/ 13 июля 2020

У меня в базе данных есть следующая таблица:

enter image description here

So I want to generate Unique-identifier and Update the UniqueID column as shown below:

введите описание изображения здесь

Если значения UniqueID одинаковы, то они должны иметь одинаковый уникальный идентификатор. Я попытался написать CTE, как показано ниже:

;WITH Duplicates AS
            (
                SELECT
                    *,
                    RowNum = ROW_NUMBER() OVER (PARTITION BY UniqueID ORDER BY TypeID)
                FROM
                    ##Table1
            )

            UPDATE ##Table1
            SET UniqueID = NEWID()
            FROM Duplicates d

Но я не получаю то, что ищу. Очень хорошо знаком с миром CTE. Каков наилучший способ получить желаемые результаты?

Ответы [ 3 ]

0 голосов
/ 13 июля 2020

Под запросом только для дубликатов:

;WITH Duplicates AS
(
    SELECT 
          UniqueID 
          ,Totale = COUNT(*)
   FROM
       ##Table1
   GROUP BY
         UniqueID
   HAVING 
        COUNT(*) > 1
)
,DuplicatesWithRowNum AS
(
    SELECT T.TypeID
   ,RowNum = ROW_NUMBER() OVER (PARTITION BY T.UniqueID ORDER BY T.TypeID)
   FROM
       ##Table1 T
       INNER JOIN Duplicates D ON D.UniqueID = T.UniqueID
 )
 UPDATE a SET UniqueID = NEWID()
 FROM
     ##Table1 T
     INNER JOIN D DuplicatesWithRowNum ON D.TypeID = T.TypeID

        
0 голосов
/ 13 июля 2020

Если вам нужно одно и то же значение для каждого UniqueId, используйте GROUP BY, чтобы присвоить значение:

WITH ids AS (
      SELECT UniqueID, NEWID() as new_uniqueid
      FROM ##Table1
      GROUP BY UniqueID
     )
UPDATE t1
     SET UniqueID = ids.new_uniqueid 
     FROM ##Table1 t1 JOIN
          ids
          ON t1.UniqueID = ids.UniqueID
0 голосов
/ 13 июля 2020

Можете попробовать ниже - если я правильно понял, то вам нужен update join

WITH Duplicates AS
(
SELECT distinct UniqueID,NEWID() as nid FROM ##Table1
)
UPDATE a SET UniqueID = nid from ##Table1 a
            join Duplicates d on a.UniqueID=d.UniqueID
...