Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2011, 23h50   #1
Membre régulier
 
Inscription : novembre 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 108
Points : 88
Points : 88
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 :
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
burndev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 14h24   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Je ne comprends pas le sens de ta requête !

Peux-tu exprimer ton besoin plus clairement ?

Citation:
Code :
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 :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h17.


 
 
 
 
Partenaires

Hébergement Web