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

Requêtes et SQL. Discussion :

Besoin d'aide sur requête Sql


Sujet :

Requêtes et SQL.

  1. #1
    Membre averti Avatar de Sekigawa
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 432
    Points : 359
    Points
    359
    Par défaut Besoin d'aide sur requête Sql
    Salut,

    Je viens demandé votre aide car là je ne comprend vraiment pas...

    Intitulé de la requête

    Quel est le montant total des débit et le montant total des crédit effectués par Mme Machin sur ses comptes ?
    Tables utiles

    (J'ai simplifié en utilisant que l'id de la personne)

    TRANSACTIONS
    TNum
    TType (débit/crédit)
    TMontant
    CliNum
    ...

    CLIENTS
    CliNum
    ...
    Requête (la dernière testée...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT SUM(T.TMontant) AS MontantCrédit, SUM (T2.TMontant) As MontantDébit 
    FROM TRANSACTIONS T, TRANSACTIONS T2, CLIENTS CL
    WHERE (T.TType="crédit")
    AND (T2.TType = "débit")
    AND (CL.CliNum=2040)
    AND (CL.CliNum=T.CliNum)
    AND (CL.CliNum=T2.CliNum);
    Et là sa plante... comme jeu d'essai j'ai mis 600€ en débit et 3000€+400€ en crédit... quand j'execute la requête ça me renvoit 1200€ pour le débit et 3400€ pour le crédit...

    Je ne comprend pas à la base je voulais faire un "INTERSECT" mais sur Access, ça existe pas...

  2. #2
    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 tu ne précises sous quelle forme tu veux les résultats.
    Je te fournis les résultats sous une forme différentes de la tienne, une ligne pour crédit, une pour débit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select T.TType, T.CliNum, SUM(T.TMontant) as MontantClient
    from TRANSACTIONS T
    inner join CLIENTS CL
    	on T.CliNum=CL.CliNum
    group by T.CliNum, T.CliNum
    Si tu veux les résultats sous la même forme.
    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
    Select  CL.CliNum, MontantCredit, MontantDebit
    from CLIENTS CL
    left outer join
    (
    	Select TD.TType, TD.CliNum, SUM(TD.TMontant) as MontantDebit
    	from TRANSACTIONS TD
    	where TD.TType = 'débit'
    	group by T.TType, T.CliNum
     
    )  As D
    	on CL.CliNum=D.CliNum
    left outer join
    (
    	Select TC.TType, TC.CliNum, SUM(TC.TMontant) as MontantCredit
    	from TRANSACTIONS TC
    	where TC.TType = 'crédit'
    	group by T.TType, T.CliNum
     
    ) as CR
    	on CL.CliNum=CR.CliNum
    where (CL.CliNum=2040)
    Les jointures externes servent lorsque Mme Machin n'a pas de crédit ou pas de débit.

    L'écriture des jointures sur Access est différent de la norme il va rajouter 150 parenthèses inutiles.
    En revanche je ne comprends pas pourquoi tu voulais utiliser INTERSECT? et en quoi il pouvait t'aider.

    A+
    Soazig

  3. #3
    Membre averti Avatar de Sekigawa
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 432
    Points : 359
    Points
    359
    Par défaut
    Salut et merci pour ta réponse !

    Comme je l'ai précisé la requête est pour ma copine qui est en Master Marketing, je savais qu'on pouvait le faire avec les jointures externes etc... Le soucis c'est qu'ils n'ont pas appris ce type de jointure...

    N'existerait-il pas un autre moyen ?

    Merci A+

  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,
    La première requête ne répond-t-elle pas à la question, il n'y a pas de jointure externe, et elle est très simple.

    Dans ta requête regarde les résultats sans faire de somme et tu comprendras d'où vient le problème. Il faut sommer d'abord.
    A+
    soazig

  5. #5
    Membre averti Avatar de Sekigawa
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 432
    Points : 359
    Points
    359
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    La première requête ne répond-t-elle pas à la question, il n'y a pas de jointure externe, et elle est très simple.

    Dans ta requête regarde les résultats sans faire de somme et tu comprendras d'où vient le problème. Il faut sommer d'abord.
    A+
    soazig
    Oui elle est simple mais pas assez lol Je ne peux pas faire de "inner join" etc... Je dois utiliser une jointure classique.

    Je veux sous la forme

    Montant débit | Montant Crédit
    XXX € | XXX €

    En utilisant que des jointures classique de type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maTable1.monChamp = maTable2.monChamp
    J'ai tout essayé sa marche pas...

  6. #6
    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
    rebonjour,
    J'aime beaucoup le je veux,tu pourrais exiger en plus ça me donnerait plus envie de te laisser choir.


    Avec une union alors
    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
    select T.CliNum, SUM(MontantCredit) as MontantCredit, sum( montantDebit) as Montantdebit
    from
    (
    Select T.CliNum, T.TMontant as MontantCredit, 0 as montantDebit
    from 
    TRANSACTIONS T,
     CLIENTS CL
    where  T.CliNum=CL.CliNum and (T.TType='crédit')
     
    union
    Select T.CliNum, 0 as MontantCredit, T.TMontant as montantDebit
    from 
    TRANSACTIONS T,
     CLIENTS CL
    where  T.CliNum=CL.CliNum and (T.TType='débit')
    ) as U
    group by T.CliNum;
    Et si ta copine n'a pas les connaissances pour cette requete non plus, je pense qu'elle ne les a pas pour résoudre l'exercice.
    As-tu compris pourquoi ta première requete était fausse, en executant
    celle là par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT T.*, T2.TMontant as Montant2
    FROM TRANSACTIONS T, TRANSACTIONS T2, CLIENTS CL
    WHERE (T.TType="crédit")
    AND (T2.TType = "débit")
    AND (CL.CliNum=2040)
    AND (CL.CliNum=T.CliNum)
    AND (CL.CliNum=T2.CliNum);
    A+
    Soazig

  7. #7
    Membre averti Avatar de Sekigawa
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 432
    Points : 359
    Points
    359
    Par défaut
    Citation Envoyé par soazig Voir le message
    Comme tu ne précises sous quelle forme tu veux les résultats.
    C'est toi qui me dit que je précise pas la forme... là je te la précise donc merci de ne pas me gronder...

    Bref c'est bon elles ont trouvé par elles-même et sa vaut pas le coup que je vous mettes la bne requête car c'est contraire à tout ce que j'ai pu apprendre.

    Merci pour votre aide !

    A+

  8. #8
    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
    Coucou,
    En fait si tu avais dit "je voudrais" cela ne m'aurait pas choqué, c'est le je veux qui ne m'as pas plu.
    Tant mieux si elles ont trouvé.
    Soazig

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

Discussions similaires

  1. Besoin d'aide pour requête SQL
    Par dinver78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/05/2007, 19h20
  2. Besoin d'aide pour requête SQL
    Par vallica dans le forum Requêtes
    Réponses: 10
    Dernier message: 09/06/2006, 00h16
  3. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 18h53
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 13h33
  5. Besoin d'aide sur requête croisée
    Par keawee dans le forum Access
    Réponses: 7
    Dernier message: 18/11/2004, 10h46

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