Posez votre question Signaler

[SQL] Problème de tris avec notion Père-Fils

overpedro 29Messages postés 5 décembre 2006Date d'inscription - Dernière réponse le 7 déc. 2006 à 18:21
Bonjour à tous,
J'ai les 2 tables suivantes:
- "GENERATIONS" contenant (entre autres) 3 colonnes "GEN_ID", "GEN_LIBELLE" et "GEN_NUM".
-"MEMBRES" contenant (entre autres) les 5 colonnes "MBR_ID","MBR_LIBELLE","MBR_PERE" (MBR_ID du "père" du membre en question),"MBR_PRINC"(booleen) et "MBR_SUPPR" (booleen)
Avec ces tables (et d'autres) je gère une arborescence de n niveau grâce à la relation parent/enfant => en fait je dois "nourrir" un "treeview"
En fait je cherche la requête SELECT pour me permettre de créer ce treeview.
J'avais essayer ça, en sachant que ça ne marcherait pas : Voici le résultat de la requête suivante sur deux tables (dbo.GENERATIONS et dbo.MEMBRES) :
SELECT dbo.GENERATIONS.GEN_ID,
dbo.GENERATIONS.LIB_GEN, /*ne pas faire attention à cette colonne
dbo.GENERATIONS.GEN_NUM,
dbo.MEMBRES.MBR_ID,
dbo.MEMBRES.MBR_LIBELLE,
dbo.MEMBRES.MBR_PERE,
dbo.MEMBRES.MBR_HIER_TYP,
dbo.MEMBRES.MBR_SUPPR
FROM dbo.GENERATIONS,dbo.MEMBRES
WHERE dbo.GENERATIONS.GEN_ID=dbo.MEMBRES.GEN_ID
AND dbo.GENERATIONS.AXE_ID='A1'
ORDER BY MBR_PERE;
Ca m'a donc donné ceci :
G1A1 Axe_T 1 MB1 AXE_TARIF NULL 0 0
G2A1 Hier_T 2 MB22 Hier_P MB1 0 0
G4A1 Gamme_T 4 MBN Gam_TDR MB2 0 1
G4A1 Gamme_T 4 MBS3 Gam_T5 MB2 0 1
G3A1 BU_T 3 MB2B BU_TF MB22 0 1
G3A1 BU_T 3 MB2E BU_TC MB22 0 1
G3A1 BU_T 3 MB2 BU_TK MB22 0 1
G4A1 Gamme_T 4 MBT3 Gam_T8 MB2B 0 1
G4A1 Gamme_T 4 MBG3 Gam_T2 MB2B 0 1
G4A1 Gamme_T 4 MBH PB_Gam MB2E 0 1
G5A1 Tarif 5 MBT5 Trf_P MBG3 0 1
G5A1 Tarif 5 MB5RX Tarif_BB MBH 0 1
G5A1 Tarif 5 MBB Tarif_B MBN 0 1
G5A1 Tarif 5 MBT4 K7_Tarif MBN 0 1
G5A1 Tarif 5 MBBB TrfKK MBS3 0 1
G5A1 Tarif 5 MB4Z Tarif_K7 MBT3 0 1
G5A1 Tarif 5 MB01 Trif_H MBT3 0 1
En fait, je ne sais pas comment faire le tri suivant : il ya une notion de père et fils (par ex, HIER_P est fils unique de Axe_T, et BU_TC, BU_TK et BU_TF sont des enfants de HIER_P, et ils ont eux mêmes des enfants) dans la 5ème colonne on trouve le nom du père.
Je voudrais les trier par GEN_NUM mais en arbre en fonction des relations pères fils, ce qui (au niveau Gen_num) devrait donner quelquechose comme ça :
1Axe_T
2HIER_P
3BU_TK
4MB2B
5Trf...
5Trf...
4MB...
3BU_TC
4MB...
5Trf...
4etc...
5etc...
5
J'espère avoir été assez clair dans mes explications. Est ce que quelqu'un pourrait m'aider ?
Merci d'avance pour votre aide,
Bien Cordialement
Lire la suite 

[SQL] Problème de tris avec notion Père-Fils »

59 réponses
Réponse
+0
moins plus
donne à peu prés le résultat que tu attend de cette requéte
overpedro- 6 déc. 2006 à 11:59
Pour le GROUP BY il veut une "aggrégation" ?
Message d'erreur :

Msg 8120, Niveau 16, État 1, Ligne 3
La colonne 'dbo.GENERATIONS.GEN_ID' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
slum-dunk- 6 déc. 2006 à 12:22
quel est le champ qui lie les deux tables?
overpedro- 6 déc. 2006 à 12:24
C'est GEN_ID ...
Ajouter un commentaire
Réponse
+0
moins plus
1er essai:
remplace ton "order by MBR_Pére" par "order by GEN_NUM"
voyons....
slum-dunk- 7 déc. 2006 à 18:21
donc le treeview tourne désormais??
overpedroslum-dunk - 6 déc. 2006 à 16:55
Hé hé ... encore ce message d'erreur :

Msg 1033, Niveau 15, État 1, Ligne 88
La clause ORDER BY n'est pas valide dans les vues, les fonctions inline, les tables dérivées, les sous-requêtes et les expressions de table communes, sauf si TOP ou FOR XML est également spécifié.

Il l'aime pas ce Order_By ...

Je sais pas si tu connais le principe de la récursivité, je suis tombé là dessus ... je pense que ça répondrait à ce problème, mais j'ai du mal c'est en anglais ... je ferai des tests quand meme cette après-midi quand tu seras parti ... je te dirai ce qu'il en est

http://www.sqlservercentral.com/...

Encore merci ... :D
slum-dunk- 6 déc. 2006 à 17:38
bon comme je dois partir je te propose solution que je ne voulais pas faire appel car un peu fastidieux,mais essayons qu'en méme:

-cest l'utilisation des vues.En fait ,tu vas trier selon tes colonnes résultats.Et tu mettra les résulats dans ses vues(les vues sont des tables virtuelles que l'on crée à partir de résultats de requetes).

-Maintenant aprés tu n'aura qu'à afficher ses tables virtuelles(vues).

je vais y réflechir arrivé à la maison...Bonne fin de soirée et Merci...
Ajouter un commentaire
Ce document intitulé « [SQL] Problème de tris avec notion Père-Fils » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?