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 :

Sous requête compréhension


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut Sous requête compréhension
    Bonsoir,

    J'ai recourt à plusieurs requêtes que j'ai dans un premier temps réalisées pour chaque action désirée. Un montant total des recettes, des dépenses et des remises en banque.

    Pour mon test je me suis appliqué aux espèces.

    Pour la réalisation de la requête du solde des espèces en caisse, j'ai regroupé toutes mes actions en une seule requête avec des sous-requêtes.

    Suis-je dans l'obligation de répéter à chaque sous requête la date pour la sélection ou est-il possible de faire autrement ?

    ma requête actuelle
    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
    25
    26
    27
    28
     
    SELECT ( SUM( Montant ) -  ( 
                   SELECT ( IFNULL( SUM( Montant ) , 0 ) +  ( 
                                  SELECT IFNULL( SUM( Montant ) , 0 )
                                    FROM Traitement t
                                         INNER JOIN Payement p
                                                 ON t.PayementID = p.PayementID AND p.PayementID = 1
                                         INNER JOIN Compte c
                                                 ON t.CompteID = c.CompteID
                                         INNER JOIN Mode m
                                                 ON c.Mode = m.ModeID AND m.Type = 0
                                   WHERE t.Journee <= '2010-04-07 00:00:00.0000' 
                              ) 
                           )
                     FROM Banque b
                    WHERE b.PayementID = 1 
                          AND
                          b.Journee <= '2010-04-07 00:00:00.0000' 
               ) 
            ) AS [Total Espèces en caisse]
      FROM Traitement t
           INNER JOIN Payement p
                   ON t.PayementID = p.PayementID AND p.PayementID = 1
           INNER JOIN Compte c
                   ON t.CompteID = c.CompteID
           INNER JOIN Mode m
                   ON c.Mode = m.ModeID AND m.Type = 1
     WHERE t.Journee <= '2010-04-07 00:00:00.0000';
    Je travaille avec SQLite et suis assez débutant avec sql.

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Je ne comprends pas le sens de ta requête !

    Peux-tu exprimer ton besoin plus clairement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FROM Traitement t
           INNER JOIN Payement p
                   ON t.PayementID = p.PayementID AND p.PayementID = 1
    Elle sert à quoi cette jointure ?
    Si p.PayementID = 1, t.PayementID vaudra aussi 1 !

    Par contre, je pense que tu peux faire une jointure avec la table Banque.

    De quelle table vient la colonne Montant ?
    Comment ce montant pourrait-il être NULL ?

    Voilà où j'arrive avec ce que je comprends pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT SUM (/*alias de table.*/Montant) - SUM(/* je ne sais quoi ! */) AS 'Total Espèces en caisse'
     FROM Traitement t
     INNER JOIN Compte c ON t.CompteID = c.CompteID
    	INNER JOIN Mode m ON c.Mode = m.ModeID
    INNER JOIN Banque b 
    	ON b.PayementID = t.PayementID
    	AND b.Journee = t.Journee
     WHERE t.Journee <= '2010-04-07 00:00:00.0000'
    	AND m.Type = 1
    	AND t.PayementID = 1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [MFC] [API mySQL] Sous requêtes
    Par Guybrush113 dans le forum MFC
    Réponses: 5
    Dernier message: 29/04/2004, 16h14
  2. Problème DBExpress et sous requêtes ???
    Par Trulane dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/03/2004, 14h40
  3. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14
  4. suppression avec sous requête conditionnelle
    Par melmel dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/03/2004, 23h20
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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