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 :

Sélection des numéros de commandes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 390
    Par défaut Sélection des numéros de commandes
    Bonjour,

    J'ai essayé depuis pas mal de temps de résoudre le problème de sélection des numéros de commandes ayant comme critère les articles commandés pas encore livrés, enfin, j'ai pu s'approcher de la solution mais ma solution affiche seulement les commandes qui n'ont plus de livraison par contre il y a des commandes qui ont des livraisons incomplètes.
    La requête est la 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
    18
    SELECT DISTINCT t1.num_commande, t1.date_commande,t1.libelle_four
    FROM 
    (
        SELECT ca.num_commande, c.date_commande, f.libelle_four, ca.quantite AS qté_commandée
        FROM CDE_ART ca
        INNER JOIN COMMANDE c ON c.num_commande = ca.num_commande
            INNER JOIN FOURNISSEUR f ON f.reference_four = c.reference_four
    ) t1
     FULL OUTER JOIN
    (
        SELECT l.num_commande,la.quantite_livree
        FROM LIV_ART la
        INNER JOIN LIVRAISON l ON l.code_livraison = la.code_livraison
            INNER JOIN FOURNISSEUR f ON f.reference_four = l.reference_four
    ) t2 ON t2.num_commande = t1.num_commande
    GROUP BY t1.num_commande, t1.date_commande, t1.libelle_four, t1.qte_commandee
    HAVING t1.qte_commandee - COALESCE(SUM(t2.quantite_livree), 0) > 0
    order by t1.num_commande
    le problème après des tests réside dans l'instruction HAVING car si je fais < 0 au lieu de > 0 il y aura affichage seulement des commandes manquées de la deuxième (> 0).

    Merci pour vos propositions et vos remarques.

  2. #2
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Si j'ai bien compris :

    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
    18
    19
     
    SELECT  CASE
    			WHEN t2.quantite_livree IS NULL THEN 'A faire'
    			WHEN t1.quantite > t2.quantite_livree THEN 'En cours'
    			WHEN t1.quantite = t2.quantite_livre THEN 'Finie'
    		END AS ETAT_LIVRAISON
    	   , t1.quantite - t2.quantite_livre AS Quantite_restante 	
    	   ,t1.*
      FROM (SELECT ca.num_commande, c.date_commande, f.libelle_four, ca.quantite
              FROM CDE_ART ca 
    		  	   INNER JOIN COMMANDE c ON (c.num_commande = ca.num_commande)
                   INNER JOIN FOURNISSEUR f ON (f.reference_four = c.reference_four)
                   ) t1,
           (SELECT l.num_commande, la.quantite_livree
              FROM LIV_ART la 
    		  	   INNER JOIN LIVRAISON l ON (l.code_livraison = la.code_livraison)
                   ) t2
     WHERE 1 = 1 
       AND t1.num_commande = t2.num_commande(+)

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 390
    Par défaut
    Bonjour,

    Merci pour votre proposition Mr. ORA-007. J'ai testé votre requête mais le problème c'est que je cherche juste les numéros de commande qui ont le critère ' A FAIRE ' ou ' EN COURS '.

    Merci de nouveau.

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Pour avoir les commandes en cours :

    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
    18
    19
    20
    21
    22
    23
    24
     
    SELECT num_commande
    FROM 
    (
    SELECT  CASE
    			WHEN t2.quantite_livree IS NULL THEN 'A faire'
    			WHEN t1.quantite > t2.quantite_livree THEN 'En cours'
    			WHEN t1.quantite = t2.quantite_livre THEN 'Finie'
    		END AS ETAT_LIVRAISON
    	   , t1.quantite - t2.quantite_livre AS Quantite_restante 	
    	   ,t1.*
      FROM (SELECT ca.num_commande, c.date_commande, f.libelle_four, ca.quantite
              FROM CDE_ART ca 
    		  	   INNER JOIN COMMANDE c ON (c.num_commande = ca.num_commande)
                   INNER JOIN FOURNISSEUR f ON (f.reference_four = c.reference_four)
                   ) t1,
           (SELECT l.num_commande, la.quantite_livree
              FROM LIV_ART la 
    		  	   INNER JOIN LIVRAISON l ON (l.code_livraison = la.code_livraison)
                   ) t2
     WHERE 1 = 1 
       AND t1.num_commande = t2.num_commande(+) 
    )
    WHERE ETAT_LIVRAISON <> 'FINIE'

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 390
    Par défaut
    Bonjour Mr ORA-OO7,

    ça m'affiche tous les commandes mêmes qui sont finies.

    Je propose un jeu de test pour être au même niveau:

    soit 2 fournisseurs, 4 commandes (1,2,3,4) et 10 articles (art1-art10) réparties comme suis:

    commande 1 du fournisseur1: art1 de quantité 10, art2 de quantité 11.
    commande 2 du fournisseur2: art3 de quantité 15, art4 de quantité 16, art5 de quantité 20.
    commande 3 du fournisseur2: art6 de quantité 15, art7 de quantité 20.
    commande 4 du fournisseur3: art7 de quantité 5, art8 de quantité 10, art9 de quantité 20, art10 de quantité 15.

    Merci.

    et 6 livraisons:
    Livraison 1 pour la commande 1: art1 de quantité 9, art2 de quantité 11.
    Livraison 2 pour la commande 2: art3 de quantité 15, art4 de quantité 10.
    Livraison 3 pour la commande 2: art5 de quantité 15.
    Livraison 4 pour la commande 3: art6 de quantité 15, art7 de quantité 20.
    Livraison 5 pour la commande 4: art7 de quantité 5, art8 de quantité 10.
    Livraison 6 pour la commande 4: art10 de quantité 10.

    donc comme résultat c'est les commandes : 1,2 et 4 qui sont en cours.

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Pour mieux vous aider, est ce que c'est possible de nous poster :

    1- Script de creation de tes table (create table ...)
    2- Script d'insertion deas données (insert into ....) un jeu d'essai.

    Cordialement Salim.

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

Discussions similaires

  1. Application de gestion des numéros de commandes
    Par jerome3826 dans le forum C++
    Réponses: 5
    Dernier message: 05/02/2014, 13h23
  2. Sélection de la derniere commande
    Par pizza dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/06/2012, 17h08
  3. Requete de sélection des 5 dernièrs entrées.
    Par WriteLN dans le forum Administration
    Réponses: 4
    Dernier message: 22/03/2004, 21h40
  4. sélection des bd en fonction des utilisateurs (pg_hba.conf)
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 18/03/2004, 18h34
  5. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29

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