Bonjour,

Je réalise un traitement de gestion des doublons dans des données clients.

Pour ce faire, je cherche les doublons sur le nom, le prénom et le code postal.
Mais on a beaucoup de doublons avec inversion du nom et du prénom.
Donc mon traitement ressemble à cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
--Autojointure avec :
								WHERE 
									t1.CodeClient<> t2.CodeClient
									AND   t1.Nom= t2.Nom
									AND   t1.Prenom= t2.Prenom
									AND   t1.CPostal = t2.CPostal 	
UNION
--Autojointure avec :
								WHERE 
									t1.CodeClient<> t2.CodeClient
									AND   t1.Prenom= t2.Nom
									AND   t1.Nom= t2.Prenom
									AND   t1.CPostal = t2.CPostal
Cela fonctionne très bien pour générer ma table de doublons.

Mais je souhaite avoir un ID pour identifier les groupes de doublons
Qu'ils soient issus du premier test ou du deuxième

L'idée serait d'avoir une sortie de ce type:

Nom : Capture d’écran 2023-06-23 101318.png
Affichages : 129
Taille : 10,2 Ko

Si vous avez une idée ou une piste à me donner cela sera top !!!
Merci beaucoup
Jean


PS : Mon code complet est ci-dessous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
	INSERT INTO QDD.dbo.QDD_Doublons_ICAR 
			SELECT 				CONVERT(VARCHAR(10),'''+@Nom_Instance_Icar+''') AS Nom_Instance_Icar 
								, t3.Nombre As Nom_Collaborateur
								, t3.Pers AS Id_Collaborateur
								, t3.Descrip AS Type_Poste_Collaborateur 
								, t1.AltaUsuario AS Id_Utilisateur
								, t1.*
								, CASE 
									WHEN t4.Codigo IS NULL THEN 0
									WHEN t4.Codigo IS NOT NULL THEN 1
									ELSE 2
									END AS Top_tgClienteFac
								, 0 AS Top_NomPrenom					
								, '''+@Vision_Ctrx +''' AS Vision_Ctrx
								, '''+ CONVERT(VARCHAR, @Date_Ctrx , 103) + ''' AS Date_Ctrx
								, SYSDATETIME() AS Date_Execution
			FROM (SELECT * FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgCliente WHERE BAJA = 0 AND AltaFec < '''+ CONVERT(VARCHAR, @Date_Ctrx , 31) + ''') t1
			LEFT JOIN [QDD].[dbo].[Table_Utilisateurs_ICAR] t3 ON t1.AltaUsuario = t3.Pers AND t3.Nom_Instance_Icar = '''+@Nom_Instance_Icar+'''
			LEFT JOIN (SELECT DISTINCT Codigo FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgClienteFac) t4 ON t1.Codigo = t4.Codigo
			WHERE EXISTS	(
								SELECT *
								FROM (SELECT * FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgCliente WHERE BAJA = 0 AND AltaFec < '''+ CONVERT(VARCHAR, @Date_Ctrx , 31) + ''') t2
								WHERE 
									t1.Codigo <> t2.Codigo
									AND   t1.Apellido1 = t2.Apellido1
									AND   t1.Nombre = t2.Nombre
									AND   t1.CPostal = t2.CPostal 				
							)
		UNION
			SELECT 				CONVERT(VARCHAR(10),'''+@Nom_Instance_Icar+''') AS Nom_Instance_Icar 
								, t3.Nombre As Nom_Collaborateur
								, t3.Pers AS Id_Collaborateur
								, t3.Descrip AS Type_Poste_Collaborateur 
								, t1.AltaUsuario AS Id_Utilisateur
								, t1.*
								, CASE 
									WHEN t4.Codigo IS NULL THEN 0
									WHEN t4.Codigo IS NOT NULL THEN 1
									ELSE 2
									END AS Top_tgClienteFac
								, 1 AS Top_NomPrenom					
								, '''+@Vision_Ctrx +''' AS Vision_Ctrx
								, '''+ CONVERT(VARCHAR, @Date_Ctrx , 103) + ''' AS Date_Ctrx
								, SYSDATETIME() AS Date_Execution
			FROM (SELECT * FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgCliente WHERE BAJA = 0 AND AltaFec < '''+ CONVERT(VARCHAR, @Date_Ctrx , 31) + ''') t1
			LEFT JOIN [QDD].[dbo].[Table_Utilisateurs_ICAR] t3 ON t1.AltaUsuario = t3.Pers AND t3.Nom_Instance_Icar = '''+@Nom_Instance_Icar+'''
			LEFT JOIN (SELECT DISTINCT Codigo FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgClienteFac) t4 ON t1.Codigo = t4.Codigo
			WHERE EXISTS	
							(
								SELECT *
								FROM (SELECT * FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgCliente WHERE BAJA = 0 AND AltaFec < '''+ CONVERT(VARCHAR, @Date_Ctrx , 31) + ''') t2
								WHERE 
									t1.Codigo <> t2.Codigo
									AND   t1.Apellido1 = t2.Nombre
									AND   t1.Nombre = t2.Apellido1
									AND   t1.CPostal = t2.CPostal 
 
							)
					AND 
					NOT EXISTS 
							(	
								SELECT Codigo 
								FROM (SELECT * FROM ['+@Id_Serveur+'].['+@Nom_BDD_Icar+'].[dbo].tgCliente WHERE BAJA = 0 AND AltaFec < '''+ CONVERT(VARCHAR, @Date_Ctrx , 31) + ''') t2
								WHERE 
									t1.Codigo <> t2.Codigo
									AND   t1.Apellido1 = t2.Apellido1
									AND   t1.Nombre = t2.Nombre
									AND   t1.CPostal = t2.CPostal 
							)