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 avec 3 tables


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut Select avec 3 tables
    Bonjour à tous,
    Je suis novice et désolée si je fais quelques erreurs.
    Mon problème c'est que j'ai 3 tables, l'une commande, l'autre sur les détails d'une commende et la dernière les fournisseurs potentiels.
    Je dois sortir dans une requête la liste de toutes les commandes avec leur détails et les fournisseurs potentiels
    Voici la structure des tables

    Table commande :
    N°commande : cmd_code
    Qté commandée : cmd_qte
    Fournisseur : cmd_fou
    Type de commande : cmd_type

    Table détails:
    N°commande : cmd_code
    N°détail commande : cmdd_code
    Emetteur commande : cmdd_emetteur
    Indicatif : cmdd_indic

    Table prix:
    N°détail commande : cmdd_code
    Fournisseur : prix_fou
    Prix : prix_valeur

    Dans la table prix, il peut y avoir aucun jusqu'à 3 fournisseurs
    Si c'était un seul fournisseur, j'aurai pas eu de problème mais quand il y a 2 ou 3 c'est la galère

    J'ai fait cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select cmd.cdm_code, cmd.cmd_qte, cmd.cmd_fou, cmd.cmd_type,
    cmdd.cmdd_code, cmdd.cmdd_emetteur, cmdd.cmdd_indic,
    (select cmdprix.prix_fou from prix cmdprix
    where cmdprix.cmdd_code = cmdd.cmdd_code
    and rownum = 1) fournisseur
    from commande cmd inner join details cmdd on
    cmd.cmd_code = cmdd.cmd_code
    inner join prix cmdprix on 
    cmdd.cmdd_code = cmdprix.cmdd_code
    order by 1
    ça marche si il n'y a aucun ou un seul fournisseur dans la table prix.
    Comment fait-on quand on veut mettre dans la colonne suivante le deuxième fournisseur?
    J'ai regardé dans d'autre discussion et c'est pour ça que j'ai éssayé avec rownum mais je cale.
    merci pour votre aide,
    Benjamine

  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
    Comment fait-on quand on veut mettre dans la colonne suivante le deuxième fournisseur?
    Qu'entendez-vous par cette phrase ?
    Si une commande a plusieurs fournisseurs vous voulez rajouter des colonnes ou bien rajouter des lignes ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Si une commande a plusieurs fournisseurs vous voulez rajouter des colonnes ou bien rajouter des lignes ?
    Et bien je veux rajouter des colonnes c'est-à-dire mettre le second fournisseur potentiel fournisseur2 dans une colonne juste après fournisseur comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT cmd.cdm_code, cmd.cmd_qte, cmd.cmd_fou, cmd.cmd_type,
    cmdd.cmdd_code, cmdd.cmdd_emetteur, cmdd.cmdd_indic,
    (SELECT cmdprix.prix_fou FROM prix cmdprix
    WHERE cmdprix.cmdd_code = cmdd.cmdd_code
    AND rownum = 1) fournisseur, fournisseur2
    FROM commande cmd INNER JOIN details cmdd ON
    cmd.cmd_code = cmdd.cmd_code
    INNER JOIN prix cmdprix ON 
    cmdd.cmdd_code = cmdprix.cmdd_code
    ORDER BY 1
    Merci à vous

  4. #4
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Il y a probablement plus simple, mais en attendant que quelqu'un te donne une autre réponse voici une solution qui devrait pouvoir fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT 
      cmd.cdm_code, cmd.cmd_qte, cmd.cmd_fou, cmd.cmd_type,
      cmdd.cmdd_code, cmdd.cmdd_emetteur, cmdd.cmdd_indic,
      first_value(cmdprix.prix_fou) over(partition by cmdprix.cmdd_code order by cmdprix.prix_fou) fournisseur,
      lag(cmdprix.prix_fou,1) over(partition by cmdprix.cmdd_code order by cmdprix.prix_fou) fournisseur2,
      lag(cmdprix.prix_fou,2) over(partition by cmdprix.cmdd_code order by cmdprix.prix_fou) fournisseur3,
    FROM commande cmd 
       INNER JOIN details cmdd ON cmd.cmd_code = cmdd.cmd_code
       INNER JOIN prix cmdprix ON  cmdd.cmdd_code = cmdprix.cmdd_code
    ORDER BY 1
    Je n'ai pas accès à une BDD actuellement donc je n'ai pas pu tester, mais de mémoire ça devrait être ça.
    Note il faut Oracle 8i au minimum.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut Merci
    Merci beaucoup ça marche impec
    PS: je travaille avec Oracle 10

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut
    En fait il y a encore un problème
    Le résultat n'affiche pas la liste des commandes où les fournisseurs potentiels sont nuls.
    J'ai tenté de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT 
      cmd.cdm_code, cmd.cmd_qte, cmd.cmd_fou, cmd.cmd_type,
      cmdd.cmdd_code, cmdd.cmdd_emetteur, cmdd.cmdd_indic,
      nvl(first_value(cmdprix.prix_fou) over(partition BY cmdprix.cmdd_code ORDER BY cmdprix.prix_fou),'') fournisseur,
      nvl(lag(cmdprix.prix_fou,1) over(partition BY cmdprix.cmdd_code ORDER BY cmdprix.prix_fou),'') fournisseur2,
      nvl(lag(cmdprix.prix_fou,2) over(partition BY cmdprix.cmdd_code ORDER BY cmdprix.prix_fou),'') fournisseur3,
    FROM commande cmd 
       INNER JOIN details cmdd ON cmd.cmd_code = cmdd.cmd_code
       INNER JOIN prix cmdprix ON  cmdd.cmdd_code = cmdprix.cmdd_code
    ORDER BY 1
    mais sans succès
    Toute suggestion est la bienvenue
    Merci

Discussions similaires

  1. select avec fonction table compliquée
    Par da_latifa dans le forum Développement
    Réponses: 4
    Dernier message: 21/07/2014, 15h38
  2. SELECT avec 2 Tables
    Par FannyMae dans le forum Requêtes
    Réponses: 9
    Dernier message: 13/06/2011, 21h13
  3. requete select avec plusieurs tables
    Par samba2005kanoute dans le forum Forms
    Réponses: 30
    Dernier message: 12/04/2007, 15h46
  4. Pb de syntaxe : Select avec plusieurs tables
    Par roxxxy dans le forum Requêtes
    Réponses: 6
    Dernier message: 27/03/2007, 11h34
  5. [PL/SQL] SELECT INTO avec type TABLE
    Par Kaejar dans le forum Oracle
    Réponses: 13
    Dernier message: 06/07/2006, 16h17

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