|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Bonjour,
j'ai une table "service" construite de cette façon : Id, Id_parent, nom, niveau 1,0, 'direction', 0 2,1, 'ss direction 1', 1 etc... j'essaie de faire une requete pour obtenir ceci : id, niv_1, niv_2, niv_3 etc.... 1, direction, null, null 2, direction, ss direction, null etc... voici la requete qui devrait normalement fonctionner mais je n'ai pas le résultat ci dessus... Code :
mais je n'ai pas le résultat souhaité... Merci pour votre aide. |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Les "SELECT * FROM service" ne servent à rien dans le FROM, il suffit de prendre la table service avec un alias différent à chaque fois. En inversant le sens des jointures externes on tombe sur un résultat plus proche de celui attendu : Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Bonjour,
Tedo01, merci pour ta réponse. Au départ j'ai utilisé ce type de script (que j'ai trouvé sur le net), mais il ne me retourne pas ce que je veux... Exemple, ton script me retournera ceci : id, niv0.nom, niv1.nom, niv2.nom 1, direction, null, null, 1, direction, ss dir1, null 1, direction, ss dir1, ss dir2 ce que je voudrais c'est : 1, direction, null, null, 2, direction, ss dir1, null 3, direction, ss dir1, ss dir2 J'ai mis à jour mon script, j'y intègre le niveau. J'essaie de "morceler" le script car il ne me retourne pas l'id souhaité... Merci |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Le problème, c'est que dans le résultat attendu l'id ne correspond pas toujours au même niveau. Ce que je ferais pour représenter tous les niveaux possibles, c'est l'union de requêtes, chacune sur un niveau : Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Utilisez sys_connect_by_path
Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Bonjour à tous,
Merci pour vos réponse, mais cela ne fonctionne pas... par exemple pour le niveau 1=> j'ai un mix du niveau 2 et niveau 1... alors que je prends bien en compte le nombre de niveau lorsque je fais mon self join... De plus, le ne fonctionne pas chez moi (sous sqldeveloper)... Merci pour votre aide! |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Je ne comprends ton problème. 1. J'ai testé ma requête sous SQL Developer et elle fonctionne. Le WITH est connu d'Oracle. 2. En mettant les données de ton premier post, j'obtiens le résultat que tu demandes... Est-ce que tu peux nous donner un jeu d'essai un peu plus étoffé du contenu de la table service accompagné du résultat attendu ? |
|
|
00
|
|
|
#8 |
![]() ![]() |
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#9 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
C'est juste
Comme go_ahead mentionnait le client SQL Developer, je n'ai pas pensé à la version d'Oracle. |
|
|
00
|
|
|
#10 | |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Je suis en 10g ...
il me met cette erreur lorsque j'essaie d'executer un Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
C'est la version du client qui compte (à moins que tu ais mal copier/coller) donc si client 8i sur une 10g WITH ne fonctionne pas.
De toute façon dans les solutions proposées avec WITH, WITH n'est là que pour simuler ta table, tu n'en as pas besoin pour executer la requête sur ton environnement. |
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
voici un jeu de ma table...(p.j.)
je suspecte que les niveaux ne reflètent pas la réalité... |
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Re-bonjour,
Est-ce que le résultat de cette requête correspond au résultat attendu (tu ne l'as pas donné) : Code :
|
||
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Bonjour,
@tedo01 : je vais essayer ce script et vous dirais si cela fonctionne. Moi j'attends un résultat de ce type niveau_0 , niveau_1, niveau_2, niveau_3, id_service direction , null , null , null , 1 direction , ss dir , null , null , 2 direction , ss dir , ss dir 2 , null , 3 direction , ss dir , ss dir 2 , div , 4 ... merci pour votre aide |
|
|
00
|
|
|
#15 | |||
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Citation:
J'ai pu essayé cette requete mais cela ne produit pas ce que je souhaite... merci pour votre aide |
|||
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
OK, mais est-ce que tu peux nous donner le résultat attendu avec le jeu d'essai que tu nous a envoyé ? Sinon, on ne va pas avancer... |
|
|
00
|
|
|
#17 | ||||||
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
Avec cette table :
Code :
Code :
Code :
|
||||||
|
10
|
|
|
#18 |
|
Membre habitué
![]() Inscription : mars 2006 Messages : 394 ![]() |
Bonjour,
@ojo77 : cela fonctionne parfaitement ! S'il serait possible d'avoir un peu d'explication ça serait super. Un grand merci d'avance à tous pour votre aide (même si je n'ai pas été très clair...) |
|
|
00
|
|
|
#19 | ||||
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
Les explications :
La première requête imbriquée (ou vue dynamique) est une requête hyérarchique, elle permet d'obtenir en colonne l'organigramme de la société. Ce sont les instruction connect by et start with qui permettent à la requête d'ordonner les lignes hyérarchiquement. On ajoute la colonne rownum (numéro de ligne) pour garder l'ordre hyérérchique en mémoire. Code :
La deuxième requête effectue un simple pivot par rapport à la colonne niveau, en fonction dela valeur de niveau, elle affiche le nom dans une colonne ou dans une autre. Code :
en suivant quelques règles : 1°)
2°) Pour remplir une valeur de la table on utilise la dernière valeur calculée non nulle et c'est l'instruction LAST VALUE qui effectue cette partie du travail. |
||||
|
10
|
Copyright © 2000-2012 - www.developpez.com