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

Oracle Discussion :

[Oracle 8.0] probleme requete count sur plusieurs tables


Sujet :

Oracle

  1. #1
    B&B
    B&B est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Points : 14
    Points
    14
    Par défaut [Oracle 8.0] probleme requete count sur plusieurs tables
    Hello,

    J'ai 2 tables (je mets juste les champs utiles pour la requete) :


    COMMANDE : pk_num_cmd date_cmd

    LIVRAISON : pk_num_liv date_liv fk_num_cmd

    Le but de la requete est de compter le nombre de commande et de livraison effectué les 7 derniers jours.

    Apres plusieurs essais, je suis arrivé à recuperer le nombre exact de commande, mais pas de livraison, ce qui est normal car je fais pas de test sur la date_liv.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT 
    count(distinct b.num_bon) "NB CMD",
    count(distinct l.num_liv) "NB LIV"
    FROM bon_de_cmd b,livraison l
    WHERE b.date_bdc 
    BETWEEN (sysdate-7) AND (sysdate);
    J'arrive pas a voir comment faire

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    il n'y a pas de jointure entre les 2 tables ?

    Par ailleurs, les 2 entités étant différentes, ça ne paraît pas judicieux de le faire en une seule requête... n'y a-t-il pas un flag ou une date de livraison dans la table commande (pour savoir si elle a été livrée) ?

  3. #3
    B&B
    B&B est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Eh bien, une Commande peut etre effectué en plusieurs Livraison

    Aucune informations sur la Livraison est dans Commande

    et Livraison a une clef etrangere (fk_num_cmd) sur la table Commande



    Je l'aurai bien fait en 2 requetes mais le prof veut pas -_-

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    	   count(distinct fk_num_cmd) "NB CMD",
    	   count(distinct num_liv) "NB LIV"
      FROM livraison
     WHERE date_liv BETWEEN sysdate-7 AND sysdate -- livraison de la semaine
       AND fk_num_cmd IN (SELECT date_cmd 
       	   			  	    FROM COMMANDE 
    					   WHERE date_bdc BETWEEN (sysdate-7) AND (sysdate)
    					  ) -- commande de la semaine
    ;

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par B&B
    Je l'aurai bien fait en 2 requetes mais le prof veut pas -_-
    T'aurais dû trouver seul dans ce cas... essaye de te débrouiller seul à l'avenir ou au moins nous fournir une poste en montrant tes 1° avancées

  6. #6
    B&B
    B&B est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    J'allais pas mettre tous mes essais precedent qui marchait pas, j ai juste mis le dernier que j ai trouve. Je l aurai bien fait seul mais j arrive pas a modeliser la structure de cette requete

    Sinon ta requete me renvoie 0 pour les 2 colonnes, alors qu il y a des commandes et livraisons.

    J'avais oublié de préciser qu'une commande peut NE PAS AVOIR de livraison (c est peut etre pour ca qu il me renvoie 0 )

    merci pour l aide , +

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    t'as le principe, à toi d'adapter selon le besoin fonctionnel.

    Ceci étant, si une commande ne peut pas avoir de livraison on se demande bien comment faire une jointure entre les 2 et à quoi sert la FK... il doit y avoir quelquechose que tu n'as pas saisi dans l'énoncé

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Sinon, pour regrouper 2 select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT sum(Q.tab1) as nb1, sum(Q.tab2) as nb2
    FROM (SELECT count(*) as tab1, 0 as tab2 FROM TABLE1 
      UNION ALL 
      SELECT 0, count(*) FROM TABLE2) Q
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    B&B
    B&B est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Fred_D
    t'as le principe, à toi d'adapter selon le besoin fonctionnel.

    Ceci étant, si une commande ne peut pas avoir de livraison on se demande bien comment faire une jointure entre les 2 et à quoi sert la FK... il doit y avoir quelquechose que tu n'as pas saisi dans l'énoncé
    lol, oui en fait la commande a forcément au moins une livraison.
    Un client ne peut pas faire une commande avec uniquement des produits non disponibles, c est impossible

Discussions similaires

  1. [Oracle] Count(*) sur plusieurs tables
    Par darkangel23fr dans le forum SQL
    Réponses: 2
    Dernier message: 16/02/2009, 11h32
  2. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  3. Requete MySQL sur plusieurs tables
    Par romulus67 dans le forum Requêtes
    Réponses: 10
    Dernier message: 03/07/2006, 17h45
  4. requête count sur deux tables
    Par psychoBob dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/06/2006, 15h12
  5. Requete COUNT sur 3 tables
    Par Le-Cortex dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h39

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