Bonjour,
j'ai un problème de groupage de donnée un peut particulier.
vu la complexité de ma problématique métier, j'ai préféré vous donner un exemple (peut être un peut stupide) mais beaucoup plus simple à expliquer (et sans doute à comprendre)
Question : comment grouper les personnes ayant des freres de même age et de même couleur de cheveux. une personne pouvant avoir plusieurs freres.
j'ai 2 tables PERSONNE et FRERE
j'aimerais editer un état Crystal Report ou les valeurs de FRERE sont groupé sur les PERSONNES ayant des valeurs de FRERE identiques
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 PERSONNE: PER_ID Nom 1 Pierre 2 Paul 3 Jacques FRERE: PER_ID Age Cheveux 1 12 Blond 1 15 Brun 2 12 Blond 2 15 Brun 3 12 Chatain 3 17 Brun
ici l'important est que PIERRE et PAUL soient identifié comme des PERSONNE ayant les mêmes valeurs de FRERE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Pierre, Paul -> Age Cheveux -> 12 Blond -> 15 Brun Jacques -> Age Cheveux -> 12 Chatain -> 17 Brun
La complexité viens du fait toutes les lignes de FRERE doivent être identiques (en valeur et en nombre) pour PIERRE et PAUL se qui empêche l'utilisation d'un GROUP BY standard.
l'idéal serais une requette permetant de générer le résultat suivant :
De sorte que je puisse alors faire un group by simple sur id_groupe...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ID Nom id_goupe Age cheveux 1 PIERRE GROUP1 12 Blond 1 PIERRE GROUP1 15 Brun 2 PAUL GROUP1 12 Blond 2 PAUL GROUP1 15 Brun 3 JACQUES GROUP2 12 Chatain 3 JACQUES GROUP2 17 Brun
j'ai deux pistes:
- la division euclidienne SQL... un collègue me dit de chercher par la. mais je m'y perd.
- définir une fonction d'agrégation spéciale qui calcule une clé unique sur FRERE à partir de plusieurs lignes... et d'utiliser cette clé comme id_groupe... mais la encore j'ai du mal a déterminer la fonction d'agrégation qui va bien.
des idées...
merci,
Patrice.
Partager