Je travaille sur un problème dans Oracle que j'ai du mal à résoudre «élégamment».SQL combine plusieurs identifiants pour créer un ID de groupe pour les enregistrements en double
I ont un extrait de données avec trois identificateurs différents: A, B, C
Chaque identificateur peut apparaître dans plus d'une rangée et chaque rangée peut avoir une ou plusieurs de ces trois identificateurs (à savoir la colonne est peuplé ou nul). Je veux être en mesure de regrouper tous les enregistrements ayant une combinaison de A, B ou C en commun et leur attribuer le même ID de groupe.
table Extrait montrant ce que les groupes éventuels doivent être:
Rownum | A | B | C | End group
1 p NULL NULL 1
2 p r NULL 1
3 q NULL NULL 2
4 NULL r NULL 1
5 NULL NULL s 2
6 q NULL s 2
Mon approche originale était d'attribuer un Guid à chaque ligne dans l'extrait et créer une table de consultation pour les trois identifiants:
GUID | IDENTIFIER | IDENTIFIER TYPE | GROUP | END GROUP
1 p A 1 1
2 p A 1 1
2 r B 2 1
3 q A 3 3
4 r B 2 1
5 s C 4 3
6 q A 3 3
6 s C 4 3
Puis regroupez par identifiant et attribuez un numéro de groupe. Les groupes, cependant, doivent être combinés si possible pour fournir la vue montrée dans le groupe final.
La seule solution que je peux penser à ce problème est d'utiliser des boucles, que je préfère éviter.
Toutes les idées seraient grandement appréciées.
Niall
l'ID du groupe peut-il être simplement une concaténation de A, B et C? –
Malheureusement pas. Si deux lignes ont l'un des identifiants en commun mais pas l'autre, la concaténation fournira deux identifiants de groupe différents.Par exemple: 2) A = null, B = null, C = q => q pq <> q mais les deux enregistrements doivent être dans le même groupe. – niallsco
Pouvez-vous fournir votre structure? est ce tableau (a, b, c) ou tableau (Id, IdentifierType, Identifier) ? Dépend de la requête de structure sera différente –