J'ai une table des utilisateurs de dimension qui contient malheureusement un grand nombre d'enregistrements en double. Voir la capture d'écran. Parcours des tables et remplacement des ID résultant des doublons dans la table des dimensions
J'ai des milliers d'utilisateurs et 5 tableaux référençant les doublons. Je veux supprimer les enregistrements avec "mauvais" UserID
s. Je veux passer par les 5 dépendances et mettre à jour le mauvais UserId
avec "bon" (encerclé en rouge).
Quelle serait une bonne approche à cela?
Voici ce que je l'ai fait pour obtenir la capture d'écran ci-dessus ...
SELECT UserID
,userIds.FirstName
,userIds.LastName
,dupTable.Email
,dupTable.Username
,dupTable.DupCount
FROM dbo.DimUsers AS userIds
LEFT OUTER JOIN
(SELECT FirstName
,LastName
,Email
,UserName
,DupCount
FROM
(SELECT FirstName
,LastName
,UserName
,Email
,COUNT(*) AS DupCount -- we're finding duplications by matches on FirstName,
-- last name, UserName AND Email. All four fields must match
-- to find a dupe. More confidence from this.
FROM dbo.DimUsers
GROUP BY FirstName
,LastName
,UserName
,Email
HAVING COUNT(*) > 1) AS userTable -- any count more than 1 is a dupe
WHERE LastName NOT LIKE 'NULL' -- exclude entries with literally NULL names
AND FirstName NOT LIKE 'NULL'
)AS dupTable
ON dupTable.FirstName = userIds.FirstName -- to get the userIds of dupes, we LEFT JOIN the original table
AND dupTable.LastName = userIds.LastName -- on four fields to increase our confidence
AND dupTable.Email = userIds.Email
AND dupTable.Username = userIds.Username
WHERE DupCount IS NOT NULL -- ignore NULL dupcounts, these are not dupes