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 :

Selects imbriqués sur 3 niveaux


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut Selects imbriqués sur 3 niveaux
    Bonjour à tous,

    Ce post fait suite à un autre post que vous pouvez voir ici :

    Pour reprendre rapidement mon problème : j'ai une table avec un id NON unique et une valeur en face. Et je veux, (pour extraire un csv), faire un select sur tous les id de ma table et récupérer les 10 premieres "valeur" pour obtenir une requete select du type Select id, valeur1, valeur2, valeur3, ...


    J'ai commencé à trouver une solution en faisant quelques tests unitaires avec un collègue. Mais cette solution implique dans le select, de faire 3 "Select" imbriqués


    La requete aurait cette tête là :

    Select
    T2.identifiant,
    (
    Select val1.valeur FROM
    (Select ROWNUM rnm, A.valeur FROM table1 A WHERE A.identifiant = T2.identifiant) val1,
    WHERE
    rnm = 1
    ) AS num1,
    (
    Select val2.valeur FROM
    (Select ROWNUM rnm, A.valeur FROM table1 A WHERE A.identifiant = T2.identifiant) val2,
    WHERE
    rnm = 2
    ) AS num2
    FROM
    table2 T2

    Alros, lrosque je fais un seul "SELECT" imbriqué, Oracle arrive bien à faire le lien dans le where avec A.identifiant = T2.identifiant
    MAIS avec l'exemple ci-dessus, je n'arrive pas à faire le lien.... Oracle me dit "colonne inconnue"......

    J'espère que vous pourrez m'aider, soit à résoudre ce souci de "SELECT" soit à arriver à une solution du post principal......


    Merci d'avance.


  2. #2
    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
    Par défaut
    Avez-vous une édition Oracle Standard ou Enterprise ?
    Cette dernière permet l'utilisation des fonctions analytiques, d'où ma question.

    Au cas où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys.v_$version

  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
    Par défaut
    D'ailleurs je ne suis pas fan du tout des select imbriqués dans le select.

    Essayez la requête suivante :
    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

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    Version Enterprise.

    Voici les infos remontées par la requête :

    Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
    PL/SQL Release 8.1.7.4.0 - Production
    CORE 8.1.7.0.0 Production
    TNS for IBM/AIX RISC System/6000: Version 8.1.7.4.0 - Production
    NLSRTL Version 3.4.1.0.0 - Production

  5. #5
    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
    Par défaut
    Alors la requête que je vous ai proposé devrait fonctionner !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut Invalid number
    ça me renvoi "invalid number"

    Je suppose que mes types de champs doivent y être pour quelquechose......

    identifiant : VARCHAR2(15)
    NAME : VARCHAR2(100)

    Pensez-vous que ces types de champs y soient pour quelque chose ?

    Je vais continuer à regarder (et je vais aussi surtout regarder à comment utiliser les fonctions que vous avez utilisées)


  7. #7
    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
    Par défaut
    Name c'est ce que j'ai utilisé en tant que valeur ?

    Si oui il faut modifier les sommes en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max(decode(T1.rk, 1, T1.valeur, null)) val1

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2013, 09h50
  2. requête avec SELECT imbriqués...
    Par dj_lil dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/07/2005, 11h21
  3. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48
  4. [debutant] select-insert sur tables de bases differentes
    Par RedMax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/10/2004, 18h59
  5. Requete select imbriqués avec plusieurs références
    Par GAlion dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/08/2004, 14h06

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