|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 96 ![]() |
Salut les amis,
Voilà j’ai une question concernant l’affichage du résultat d’une requête Sql depuis la vertical vers l’horizontal, je m’explique : J’ai la table table1 contenant les informations ci-dessous : Code :
Ce que Je souhaiterai faire c’est d’interroger cette table de sorte à ressortir le résultat suivant : Code :
Est-ce que c’est possible ?? Merci |
||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
2 solutions:
1) Si tu connais à l'avance le nombre de numéros de téléphones possibles il suffit de faire plusieurs alias de ta table et des les lier sur les champs communs (Nom et Prénom dans ton cas). A noter que s'il n'y a aucun moyen de les différencier (un ID par exemple) tu risques d'avoir des doublons et pour obtenir un résultat propre il va falloir utiliser des fonctions analytiques. 2) Si tu acceptes de réunir tous les numéros de téléphone dans une seule colonne, tu peux détourner une fonction XML: Code :
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
||
|
|
00
|
|
|
#3 | ||
|
Membre actif
![]() Yong Huang Inscription : janvier 2010 Messages : 105 ![]() |
J'ai un exemple à
http://yong321.freeshell.org/oranote...ueryResult.txt Code :
|
||
|
00
|
|
|
#4 | ||
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
Un exemple avec une seule requete
Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Oui c'est un bon exemple, attention qu'il ne se limite qu'à 3 valeurs.
Attention aussi qu'avec la structure dénormalisée que possède mohe27, il faudra retravailler les résultats pour éviter les doublons.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Si t'es en 11g, tu peux aussi regarder du coté de la clause PIVOT si tu sais caractériser tes colonnes à l'avance.
Pour transformer des données colonnes en ligne, tu as aussi la clause WITHIN GROUP mais SQL ne te donnera pas la possibilité de faire un nombre variable de colonne sauf à faire une fonction qui te renvoit un sys_refcursor (mais se pose toujours le pb de son affichage et de son traitement.) exemple d'utilisation de LISTAGG/WITHIN GROUP Code :
|
||
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 96 ![]() |
Bonjour les amis,
et je vous remercie pour ces réponses, cependant j'aurai quelques remarques comme suit: 1ère réponse nuke_y: ta solution est très bonne et elle prend en compte le nombre 1--n des num-tel que peut posséder un nom unique, le resultat est concaténé en une seule colonne "Tel List" avec "-" comme séparateur entre chaque num-tel, seulement mon besoin est de faire resortir le resultat des num-tel sur des colonnes distinctes. 2ème réponse yong321: ta solution concrétise bien une sortie correcte des résultat seulement là elle fait appel à 2 tables disrinctes et dans mon cas je ne dispose que d'une seule table. 2ème réponse spdev666:ta solution est excellente seulement elle est figée sur des données precises sur ce que j'ai données en exemple dans la table table1 or celle que je compte interroger rellement contient quelques 30 000 lignes. Donc le souhait est de faire sortir des resultats sans doublons coté "nom" et "prenom" avec autant de colonnes que necessaires pour le num-tel comme par exemple le tableau ci-dessous: Code :
|
||
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Après, tout dépend de ton interface, oracle fourni les données et l'appli cliente est chargée de les mettre en forme, il faut pas trop en demander à SQL. Donc pour résoudre ton problème, il faut que tu donnes la finalité du truc. Encore une fois, la solution qui s'approcherait le plus des exemples que tu donnes est d'appeler une fonction qui fa générer dynamiquement une requête et revoyer le tout dans un sys_refcursor. Le SQL*PLUS est alors capable de restituer ce curseur par une variable locale de type "refcursor" EDIT: mais c'est quand meme une belle usine à gaz!
|
|
|
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 96 ![]() |
ok remi4444,
Et si je fixais le nombre de colonnes num-tel à 5 par exemple, comment pourrais-je sortir un tel resultat selon ce que j'ai illustré plus haut ?? merci |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
spdev666 et yong321 t'ont déjà répondu.
|
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2007 Messages : 96 ![]() |
Merci remi4444,
et merci à tout le monde, en fait j'ai pris l'exemple de spdev666 que je viens juste de reparamétrer avec les données que j'ai et ce avec requetes sur toute la table . ça marche à merveille même si tu as un nom avec 3 num-tel et un autre avec 1 ou 2 seulement, la 3ème colonne de ce dernier en ressortira vide merci encore l'équipe
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com