Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 29/03/2011, 00h57   #1
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 80
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 80
Points : 14
Points : 14
Par défaut Besoin d'aide dans ma requête

Salut les gars

Voilà je bloque sur une requête et j'aurai besoin de votre aide.

Je fais une application de gestion pour ma mère ou j'ai créé une table facture une table des détails de facture et une table encaissements et j'aimerai faire une requête qui me sort pour chaque facture le montant total des détails de facture et le montant total des encaissements (si il n'y en à pas = 0)

image des tables

Merci de votre aide
akaii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 12h04   #2
Membre Expert
 
Avatar de zoom61
 
Homme Vincent ...
Passionné d'informatique
Inscription : janvier 2005
Messages : 1 217
Détails du profil
Informations personnelles :
Nom : Homme Vincent ...
Âge : 39
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Passionné d'informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 1 217
Points : 1 506
Points : 1 506
Envoyer un message via Yahoo à zoom61 Envoyer un message via Skype™ à zoom61
Quelque chose comme cela :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
   fac.id_facture,
   fac.id_num_facture,
   det.montant_detail,
   decode(enc.montant_encaissement, NULL, 0, enc.montant_encaissement) montant_encaissement
FROM
   seeb_factures fac
      INNER JOIN (SELECT
                  id_facture,
                  sum(montant_hors_taxe_facture_detail) montant_detail
               FROM
                  seeb_factures_details
               GROUP BY
                  id_facture) det
         ON fac.id_facture = det.id_facture
      LEFT JOIN (SELECT
                  id_facture,
                  sum(montant) montant_encaissement
               FROM
                  seeb_encaissements
               GROUP BY
                  id_facture) enc
         ON fac.id_facture = enc.id_facture
__________________
N'oubliez pas le Tag :

C'est en parvenant à nos fins par l'effort, en étant prêt à faire le sacrifice de profits immédiats en faveur du bien-être d'autrui à long terme, que nous parviendrons au bonheur caractérisé par la paix et le contentement authentique. [Dalaï Lama]
Je ne réponds pas aux messages privés s'ils sont liés à une question du forum

Mon site sur Developpez.com
zoom61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 13h41   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
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 : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Trop compliquée ta requête zoom !
Et fausse chez MySQL puisque DECODE est pour déchiffrer une chaîne chiffrée !

Citation:
pour chaque facture le montant total des détails de facture et le montant total des encaissements
Il suffit de joindre les trois tables, de faire un regroupement et d'additionner les bonnes colonnes :
Code :
1
2
3
4
5
6
7
SELECT f.num_facture, 
    SUM(d.montant_hors_taxe_facture_detail) AS Somme_detail_facture,
    SUM(e.montant) AS Somme_encaissement
FROM seeb_factures f
INNER JOIN seeb_factures_details d ON d.id_facture = f.id_facture
LEFT OUTER JOIN seeb_encaissements e ON e.id_facture = f.id_facture
GROUP BY f.num_facture
__________________
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
Vieux 29/03/2011, 13h49   #4
Membre Expert
 
Avatar de zoom61
 
Homme Vincent ...
Passionné d'informatique
Inscription : janvier 2005
Messages : 1 217
Détails du profil
Informations personnelles :
Nom : Homme Vincent ...
Âge : 39
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Passionné d'informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2005
Messages : 1 217
Points : 1 506
Points : 1 506
Envoyer un message via Yahoo à zoom61 Envoyer un message via Skype™ à zoom61
Il me semble que si tu fais comme cela tu vas avoir des redondances (tu ne fais les liens que sur l'id_facture)... Si tu as 5 lignes sur factures_details et 2 lignes sur encaissements, tu auras la somme de 10 lignes qui sera alors fausse... et ce cas là dois surement existé !!!
Citation:
Envoyé par CinePhil Voir le message
...
Code :
1
2
3
4
5
6
7
SELECT f.num_facture, 
    SUM(d.montant_hors_taxe_facture_detail) AS Somme_detail_facture,
    SUM(e.montant) AS Somme_encaissement
FROM seeb_factures f
INNER JOIN seeb_factures_details d ON d.id_facture = f.id_facture
LEFT OUTER JOIN seeb_encaissements e ON e.id_facture = f.id_facture
GROUP BY f.num_facture
Mais en faisant avec une requête comme cela je n'aurai qu'une ligne venant de factures_details et aucune ou une ligne venant d'encaissements :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT
   fac.id_facture,
   fac.id_num_facture,
   det.montant_detail,
   enc.montant_encaissement
FROM
   seeb_factures fac
      INNER JOIN (SELECT
                  id_facture,
                  sum(montant_hors_taxe_facture_detail) montant_detail
               FROM
                  seeb_factures_details
               GROUP BY
                  id_facture) det
         ON fac.id_facture = det.id_facture
      LEFT JOIN (SELECT
                  id_facture,
                  sum(montant) montant_encaissement
               FROM
                  seeb_encaissements
               GROUP BY
                  id_facture) enc
         ON fac.id_facture = enc.id_facture
__________________
N'oubliez pas le Tag :

C'est en parvenant à nos fins par l'effort, en étant prêt à faire le sacrifice de profits immédiats en faveur du bien-être d'autrui à long terme, que nous parviendrons au bonheur caractérisé par la paix et le contentement authentique. [Dalaï Lama]
Je ne réponds pas aux messages privés s'ils sont liés à une question du forum

Mon site sur Developpez.com
zoom61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 13h53   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
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 : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par zoom61 Voir le message
Il me semble que si tu fais comme cela tu vas avoir des redondances (tu ne fais les liens que sur l'id_facture)... Si tu as 5 lignes sur factures_details et 2 lignes sur encaissements, tu auras la somme de 10 lignes qui sera alors fausse... et ce cas là dois surement existé !!!
En effet, tu as peut-être raison, je n'ai pas testé.
__________________
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
Vieux 29/03/2011, 22h57   #6
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 80
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 80
Points : 14
Points : 14
[quote=CinePhil;5875341]
Citation:
Envoyé par zoom61 Voir le message
Il me semble que si tu fais comme cela tu vas avoir des redondances (tu ne fais les liens que sur l'id_facture)... Si tu as 5 lignes sur factures_details et 2 lignes sur encaissements, tu auras la somme de 10 lignes qui sera alors fausse... et ce cas là dois surement existé !!![/quote)
En effet, tu as peut-être raison, je n'ai pas testé.
Ok merci à vous c'est tout ce qu'il me fallait!
akaii est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web