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

Langage SQL Discussion :

Requête corrélée ?


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut Requête corrélée ?
    bonjour
    je galère depuis un moment sur une requête, je suppose que c'est une requête corrélée que je dois faire dans ce cas de figure, mais après de nombreux tests, je tombe toujours à côté.
    je m'y prend certainement mal et souhaiterai un petit coup de main svp ...

    en fait, j'aimerai obtenir le nombre de lignes articles commandées par date (pas de soucis), et parmi ces lignes articles commandés, avoir le nombre de lignes livrées le jour de la commande (là c'est le début des problèmes... ) et dont le statut en entête = 2
    j'ai tout d'abord essayé de me débrouiller avec les jointures, mais je n'ai pas toutes les possibilités de critères, donc le résultat n'est pas tout à fait correct.

    je vous met ci-après un petit exemple.

    #detail_commandes
    num_cde;reference;num_ligne_com;date_commande
    commande1;article1;ligne1;01/04/23
    commande1;article2;ligne2;01/04/23
    commande1;article3;ligne3;01/04/23
    commande1;article4;ligne4;01/04/23
    commande1;article5;ligne5;01/04/23
    commande2;article1;ligne1;01/04/23
    commande2;article2;ligne2;01/04/23
    commande2;article3;ligne3;01/04/23
    commande3;article1;ligne1;01/04/23
    commande3;article2;ligne2;01/04/23
    commande4;article1;ligne1;02/04/23
    commande4;article2;ligne2;02/04/23
    commande4;article3;ligne3;02/04/23
    commande4;article4;ligne4;02/04/23
    commande4;article5;ligne5;02/04/23
    commande5;article1;ligne1;02/04/23
    commande5;article2;ligne2;02/04/23
    commande5;article3;ligne3;02/04/23
    commande6;article1;ligne1;02/04/23
    commande6;article2;ligne2;02/04/23
    commande7;article1;ligne1;03/04/23


    #detail_livraisons
    num_liv;num_cde;reference;num_ligne_liv;date_livraison;num_ligne_com
    livraison1;commande1;article1;ligne1;01/04/23;ligne1
    livraison1;commande1;article2;ligne2;01/04/23;ligne2
    livraison1;commande1;article3;ligne3;01/04/23;ligne3
    livraison1;commande1;article4;ligne4;02/04/23;ligne4
    livraison1;commande1;article5;ligne5;02/04/23;ligne5
    livraison2;commande2;article1;ligne1;01/04/23;ligne1
    livraison2;commande2;article2;ligne2;01/04/23;ligne2
    livraison2;commande2;article3;ligne3;01/04/23;ligne3
    livraison3;commande3;article1;ligne1;03/04/23;ligne1
    livraison3;commande3;article2;ligne2;03/04/23;ligne2
    livraison4;commande4;article1;ligne1;02/04/23;ligne1
    livraison4;commande4;article2;ligne2;02/04/23;ligne2
    livraison4;commande4;article3;ligne3;02/04/23;ligne3
    livraison4;commande4;article4;ligne4;02/04/23;ligne4
    livraison4;commande4;article5;ligne5;02/04/23;ligne5
    livraison5;commande5;article1;ligne1;02/04/23;ligne1
    livraison5;commande5;article2;ligne2;02/04/23;ligne2
    livraison5;commande5;article3;ligne3;02/04/23;ligne3
    livraison6;commande6;article1;ligne1;03/04/23;ligne1
    livraison6;commande6;article2;ligne2;03/04/23;ligne2


    #entete_livraions
    num_liv;statut;date_liv
    livraison1;2;01/04/23
    livraison1;2;01/04/23
    livraison1;2;01/04/23
    livraison1;2;02/04/23
    livraison1;2;02/04/23
    livraison2;2;01/04/23
    livraison2;2;01/04/23
    livraison2;2;01/04/23
    livraison3;2;03/04/23
    livraison3;2;03/04/23
    livraison4;2;02/04/23
    livraison4;2;02/04/23
    livraison4;2;02/04/23
    livraison4;2;02/04/23
    livraison4;2;02/04/23
    livraison5;2;02/04/23
    livraison5;2;02/04/23
    livraison5;2;02/04/23
    livraison6;2;03/04/23
    livraison6;2;03/04/23


    #resultat attendu
    date_com;nb_lig_com;nb_lig_liv
    01/04/23;10;6
    02/04/23;10;8
    03/04/23;1;0



    #requete
    SELECT
    detail_commandes.date_commande
    count(detail_commandes.num_ligne_com)
    count(detail_livraisons.num_ligne_liv)
    from
    detail_commandes
    left outer join detail_livraisons on (detail_commandes.num_cde=detail_livraisons.num_cde and detail_commandes.num_ligne_com=detail_livraisons.num_ligne_com
    and detail_livraisons.date_commande=detail_commandes.date_livraison)

    group by
    detail_commandes.date_commande
    merci pour l'aide que vous pouvez m'apporter, là je sèche ...

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 370
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Donne le DDL (définition des tables) pour qu'on puisse t'aider efficacement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut
    bonjour
    je ne les ai pas, je vais essayer de préparer un truc

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 730
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    La base de données semble mal conçue :
    • il est anormal d'avoir la date de commande dans la table "detail_commande", cette date ne devrait être que dans l'entête de commande ;
    • il est anormal d'avoir plusieurs fois le même identifiant de livraison dans la table "entete_livraison" ;
    • il est anormal d'avoir la date de livraison dans la table "detail_livraison", pire encore, d'avoir des dates différentes pour une même livraison dans cette table. Une livraison c'est une et une seule date qu'on doit trouver uniquement dans l'entête de livraison.


    Communiquez la description exacte des tables comme demandé par Seb, puis il faudra commencer par revoir le modèle, dans la mesure du possible bien entendu, avant de réfléchir aux requêtes. Un modèle mal conçu étant la source de redondances, de données peu fiables et de requêtes complexes et contre performantes.

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Je suis d'accord que la base est bizarrement conçue, en particulier on a l'impression que les numéros de commande repartent à zéro chaque jour... ceci dit, si on accepte les pré-supposés de la requête fournie, il suffit de faire un LEFT JOIN sur entete_livraisons en incluant le filtre de statut dans les conditions de jointure.

    en fait, j'aimerai obtenir le nombre de lignes articles commandées par date (pas de soucis), et parmi ces lignes articles commandés, avoir le nombre de lignes livrées le jour de la commande (là c'est le début des problèmes... ) et dont le statut en entête = 2
    Si je repars de ta requête, ça devrait donner un truc comme ça (j'ai ajouté des alias de table pour alléger l'écriture des jointures, parce que sinon on ne voit plus rien) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
      DC.date_commande,
      count(DC.num_ligne_com) as NbComm,
      count(DC.num_ligne_liv) as NbLiv
    from
      left outer join detail_livraisons DL
        on DC.num_cde=DL.num_cde 
          and DC.num_ligne_com=DL.num_ligne_com
          and DL.date_commande=DC.date_livraison
      left outer join entete_livraisons EL
        on DL.num_liv = EL.num_liv
          and DL.date_livraison = EL.date_livraison
          and EL.statut = 2
    group by DC.date_commande

Discussions similaires

  1. UPDATE avec sous-requête corrélée
    Par Oishiiii dans le forum Requêtes
    Réponses: 0
    Dernier message: 04/09/2009, 10h58
  2. Requête corrélée : optimisation
    Par alband85 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 18/07/2009, 00h55
  3. Sous-requête corrélée ne fonctionne pas
    Par Sylvain74 dans le forum Access
    Réponses: 5
    Dernier message: 19/09/2008, 09h35
  4. [connect by] Sous-requêtes corrélées
    Par raj dans le forum SQL
    Réponses: 2
    Dernier message: 27/07/2007, 16h49
  5. Pb Requête Corrélées sur MS SQL-SERVER2000
    Par Pongo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/09/2005, 17h08

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