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 :

Problème requête imbriquée


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut Problème requête imbriquée
    Bonjour,

    J'essaie de faire une requête avec une jointure left join (pour le moment) sur deux tables qui permettent de récuperer la somme des quantites pour les deux tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT code_pf, SUM(qté) AS QtéFactureValid
    FROM            CC_Stats_Vente as tb1
    group by code_pf,qté
    LEFT OUTER JOIN
    (SELECT        client,SUM(encours_livr) 
                             AS QteFactAttenteVal
    FROM            CC_factures_ligne 
    WHERE        (client + FS + Lig_FS LIKE 'CARREF%')
    group by client,encours_livr
    ) as  tb2 on tb1.client = tb2.client
    Malheureusement,ceci me raméne déjà des erreurs et je ne vois pas d'où cela peut venir.

    Erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg*156, Niveau*15, État*1, Ligne*5
    Syntaxe incorrecte vers le mot clé 'LEFT'.
    Msg*156, Niveau*15, État*1, Ligne*12
    Syntaxe incorrecte vers le mot clé 'as'.
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    la structure générale d'une requete select n'est pas respectée.

    Vous devez avoir ceci :
    SELECT -----------
    FROM -------------
    JOINTURE ---------
    WHERE -----------
    GROUP BY --------
    HAVING ----------
    ORDER BY---------

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    Il y plusieurs erreurs dans cette requête:
    L'alias TB1 doit porter sur la première requête, et non sur la table
    Le GROUP-By ne doit pas inclure les colonnes faisant l'objet d'une aggrégation
    La colonne client n'existe pas dans TB1 (même si le problème d'alias est corrigé), donc la jointure tb1 tb2 n'est pas bonne.

    Tatayo.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Comme le dit punkoff ton premier group by devrait se trouver après la sous requête left outer join.
    D'autre part, dans ta sous requête tu sommes ncours_livr mais tu fais un group by dessus, cela semble incohérent.
    Cordialement
    Soazig

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Merci pour vos réponses :

    J'ai repris ma requête qui donne maintenant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  tb1.code_pf, SUM(qté) AS QtéFactureValid,QteFactAttenteVal
    FROM            CC_Stats_Vente as tb1
    LEFT  JOIN
    (SELECT         CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS AS Expr1, SUM(CC_factures_ligne.encours_livr) AS QteFactAttenteVal
    FROM            CC_factures_ligne as tb2 ON tb1.code_pf = tb2.Expr1 
    LEFT JOIN
     (select * from  CC_Factures where CC_Factures.date_auto BETWEEN GETDATE() - 26 AND GETDATE()  as tb3 ON tb2.no_enreg = tb3.no_enreg
     
    WHERE  (CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS LIKE 'CARREF%')))
    WHERE        (code_pf LIKE 'CARREF%') AND (date_fact BETWEEN GETDATE() - 26 AND GETDATE()) AND (valo = 'O') AND (qté > 0)) 
    GROUP BY code_pf,QteFactAttenteVal

    Mais j'ai toujours une erreur au niveau de " as tb3 ON tb2.no_enreg = tb3.no_enreg"

    Erreur synthaxe incorrect.

    Des idées ?

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Je pense que les parenthèses sont mal placées à la ligne 7:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (SELECT * FROM  CC_Factures WHERE CC_Factures.date_auto BETWEEN GETDATE() - 26 AND GETDATE() )  AS tb3 ON tb2.no_enreg = tb3.no_enreg
    Du coup il doit y en avoir une autre mal placée, mais je te laisse chercher

    Tatayo.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    J'ai fais la modif mais c'est toujours pas le top

    Ma requête ressemble à ca maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  tb1.code_pf, SUM(qté) AS QtéFactureValid,QteFactAttenteVal
    FROM            CC_Stats_Vente as tb1
    LEFT  JOIN
    (SELECT         no_enreg,CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS AS Expr1, SUM(CC_factures_ligne.encours_livr) AS QteFactAttenteVal
    FROM            CC_factures_ligne as tb2 ON tb1.code_pf = tb2.Expr1 
    LEFT  JOIN
     (select no_enreg,date_auto from  CC_Factures ) AS tb3 ON tb2.no_enreg = tb3.no_enreg
    WHERE  (CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS LIKE 'CARREF%') AND CC_Factures.date_auto BETWEEN GETDATE() - 26 AND GETDATE())
    WHERE        code_pf LIKE 'CARREF%' AND date_fact BETWEEN GETDATE() - 26 AND GETDATE() AND valo = 'O' AND qté > 0) 
    GROUP BY code_pf,QtéFactureValid,QteFactAttenteVal
    J'ai toujours la même erreur

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Et ainsi ?
    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
    15
     
    SELECT  tb1.code_pf, SUM(qté) AS QtéFactureValid,QteFactAttenteVal
    FROM CC_Stats_Vente AS tb1
    LEFT  JOIN
    (
    	SELECT no_enreg,CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS AS Expr1, SUM(CC_factures_ligne.encours_livr) AS QteFactAttenteVal
    	FROM CC_factures_ligne AS tb2 group by no_enreg,CC_factures_ligne.client,CC_factures_ligne.FS,CC_factures_ligne.Lig_FS 
    ) ON tb1.code_pf = tb2.Expr1 
    LEFT  JOIN
    (
    	SELECT no_enreg,date_auto FROM  CC_Factures 
    ) AS tb3 ON tb2.no_enreg = tb3.no_enreg
    WHERE CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS LIKE 'CARREF%' AND CC_Factures.date_auto BETWEEN GETDATE() - 26 AND GETDATE()
    and code_pf LIKE 'CARREF%' AND date_fact BETWEEN GETDATE() - 26 AND GETDATE() AND valo = 'O' AND qté > 0)
    GROUP BY tb1.code_pf

    J'ai juste un doute sur le premier GROUP BY.

    Tatayo.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Ca lui plait pas non plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg 156, Niveau 15, État 1, Ligne 7
    Syntaxe incorrecte vers le mot clé 'ON'.
    Msg 156, Niveau 15, État 1, Ligne 11
    Syntaxe incorrecte vers le mot clé 'AS'.
    Il fait vraiment la tronche aujourd'hui MOUsieur Requête imbriquée

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Oups, les alias sont mal placés:
    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
    15
     
     
    SELECT  tb1.code_pf, SUM(qté) AS QtéFactureValid,QteFactAttenteVal
    FROM CC_Stats_Vente AS tb1
    LEFT  JOIN
    (
    	SELECT no_enreg,CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS AS Expr1, SUM(CC_factures_ligne.encours_livr) AS QteFactAttenteVal
    	FROM CC_factures_ligne GROUP BY no_enreg,CC_factures_ligne.client,CC_factures_ligne.FS,CC_factures_ligne.Lig_FS 
    ) AS tb2  ON tb1.code_pf = tb2.Expr1 
    LEFT  JOIN
    CC_Factures 
    AS tb3 ON tb2.no_enreg = tb3.no_enreg
    WHERE CC_factures_ligne.client + CC_factures_ligne.FS + CC_factures_ligne.Lig_FS LIKE 'CARREF%' AND CC_Factures.date_auto BETWEEN GETDATE() - 26 AND GETDATE()
    AND code_pf LIKE 'CARREF%' AND date_fact BETWEEN GETDATE() - 26 AND GETDATE() AND valo = 'O' AND qté > 0)
    GROUP BY tb1.code_pf
    Il faut aussi donner des alias aux expressions dans les sous-requêtes, car je doute que tb2.expr1 soit bien accepté et surtout c'est une source d'erreur.

    J'ai viré la sous-requête avec CC_Facture, car elle me semble inutile, mais il faut revoir la condition de jointure. Là je te laisse faire

    Tatayo.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Alors,ca marche nickel mais j'ai toujours un gros problème quand même car lorsque date_fact n'est pas " BETWEEN GETDATE() - 26 AND GETDATE() " , hey ben,ca ne m'affiche aucune des deux sommes même si le deuxième critère de date est bon (date_auto BETWEEN GETDATE() - 26 AND GETDATE())

    Ou est ce que je pourrais intégrer ce critère dans ma requête pour que ca soit le cas ?

    Je voudrais vraiment que mes deux quantités ne soient pas liés par des contrainte exceptés pour le code_pf

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    C'est un peu ce que je disais: il faut sortir les critères de la clause WHERE pour les mettre dans la jointure.
    Sinon ça revient à faire une jointure interne.

    Tatayo.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Très bien, je te remercie. C'est pas évident parce que je ne sais pas où placer cette foutu deuxième date mais je vais faire de mon mieux..

    A bientôt !

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

Discussions similaires

  1. Problème requête imbriquée
    Par Alexandre` dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/03/2008, 10h51
  2. [MySQL] Problème requête imbriquée
    Par Little_flower dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 21/08/2007, 18h58
  3. Problème requêtes imbriquées
    Par jean-paul lepetit dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 20/03/2007, 10h32
  4. Problème Requête Imbriquée
    Par PaulPersonne820 dans le forum Hibernate
    Réponses: 1
    Dernier message: 31/01/2007, 22h40
  5. Problème Requête imbriquée
    Par EddieN dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/10/2006, 07h52

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