IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Select sur une seule ligne à partir d'une table et plusieurs lignes


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Points : 38
    Points
    38
    Par défaut Select sur une seule ligne à partir d'une table et plusieurs lignes
    Bonjour à tous,

    Je vais essayer d'exposer mon probleme le plus clairement possible :

    Tout d'abord, pour info, je suis sous Oracle 8i (donc pas de LEFT OUTER JOIN, etc...)

    J'ai une table avec la structure suivante :
    table1
    (
    identifiant (PAS unique),
    valeur
    )

    et je lie cette table1 avec une table 2 ayant la structure suivante :
    table2
    (
    identifiant (unique)
    commentaire
    )

    A partir de table1 liée avec table 2 avec une jointure externe entre les champs "identifiant", je voudrais faire une requete qui me ramène la ligne suivante :

    identifiant valeur1 valeur2 valeur3

    identifiant étant l'identifiant lié de table2
    valeur1 étant la première valeur trouvée pour valeur de table1
    valeur2 étant la seconde valeur trouvée pour valeur de table1
    valeur3 étant la troisième valeur trouvée pour valeur de table1


    Pour le moment j'ai la requête suivante :

    Select
    table2.identifiant,
    T1.valeur,
    T2.valeur,
    T3.valeur
    FROM
    table1 T1,
    table1 T2,
    table1 T3,
    table2
    WHERE
    table2.identifiant = T1.identifiant(+)
    AND
    table2.identifiant = T2.identifiant(+)
    AND
    table2.identifiant = T3.identifiant(+)
    Mais ça ne me ramène pas uniquement la ligne souhaitée vu que pour T1, T2 et T3 je ne sais pas comment spécifier que je veux qu'il ramène uniquement la Xième valeur...


    J'espère que certains d'entre vous pourront m'aider sur ce problème......

    Nono.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Points : 38
    Points
    38
    Par défaut
    Merci à WALDAR qui a résolu le problème.

    La solution complète du problème se trouve ici :

    Voici ci-dessous un résumé de la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT
        T2.identifiant,
        sum(decode(T1.rk, 1, T1. valeur, 0)) val1,
        sum(decode(T1.rk, 2, T1. valeur, 0)) val2,    
        sum(decode(T1.rk, 3, T1. valeur, 0)) val3,
        sum(decode(T1.rk, 4, T1. valeur, 0)) val4,
        sum(decode(T1.rk, 5, T1. valeur, 0)) val5       
    FROM
        table2 T2,
        (    
        SELECT Table1.*, row_number() over (partition BY identifiant ORDER BY valeur) rk
        FROM Table1
        ) T1
    WHERE
        T2.identifiant = T1.identifiant(+)
    GROUP BY
        T2.identifiant

    Dans mon cas, le champ valeur est de type VARCHAR, d'où une erreur

    => CHANGER LE "SUM" par un "MAX"


    J'espère que ce post pourra être utilse à certains d'entre vous !!

    Encore merci WALDAR !

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Points : 18 395
    Points
    18 395
    Par défaut
    Citation Envoyé par nono27200 Voir le message
    => CHANGER LE "SUM" par un "MAX" et le 0 par un null !
    Une petite correction et merci pour les gentillesses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [11g] Charger plusieurs lignes à partir d'une seule
    Par raz2008 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 02/12/2013, 16h55
  2. Drag de plusieurs lignes à partir d'une liste
    Par Samildanach dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 15/12/2010, 11h49
  3. Réponses: 4
    Dernier message: 10/10/2010, 12h46
  4. Réponses: 4
    Dernier message: 28/09/2010, 11h47
  5. Créer une fonction de plusieurs lignes à partir d'une chaine
    Par sopsag dans le forum Général Python
    Réponses: 5
    Dernier message: 21/10/2009, 19h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo