Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
602 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] SUM & INNER

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] SUM & INNER

n°2237854
hogz
Posté le 12-09-2014 à 09:24:30  profilanswer
 

Bonjour,
 
n'ayant pas la maîtrise d'SQL, je tourne un peu rond pour cette requête...
 
J'ai 3 tables
- calendrier  
- stages
- bilan2014
 
la clé REF commune a ces tables.
 
Je voudrais présenter un tableau:
 
----------------------------------------------------------
***     REFXXX   ***    RECETTE   ***   DEPENSES          -
----------------------------------------------------------
 
Donc j'ai fait la requête
 
 
SELECT calendrier.REF, SUM(stages.RECETTE) AS recette, SUM(bilan2014.montant) AS depenses
FROM stages,calendrier,bilan2014  
WHERE calendrier.REF=stages.REF
AND Conditions.............  
GROUP BY calendrier.REF
Les résultats s'affichent avec des erreurs de montant dans les SUM.
 
Cette piste est-elle bonne? :??:  
Merci pour votre aide. ;)


Message édité par hogz le 17-09-2014 à 07:26:19
mood
Publicité
Posté le 12-09-2014 à 09:24:30  profilanswer
 

n°2237857
olivthill
Posté le 12-09-2014 à 10:02:34  profilanswer
 

Le code qui est montré semble correct, à condition que les données dans stages.RECETTE et bilan2014.montant soient bien des nombres (pas des données nulles, par exemple).
 
Il faudrait tester sans mettre les sum() et sans le group by, parce que ça pourrait aider à détecter un problème.

n°2237876
hogz
Posté le 12-09-2014 à 12:54:03  profilanswer
 

Merci pour la réponse...
- stages.RECETTE les valeurs sont toujours un chiffre (pas de ligne à 0)
- bilan2014.montant soit un chiffre soit 0

n°2237993
gpl73
Posté le 15-09-2014 à 12:34:15  profilanswer
 

hogz :
dans ta requete :
SELECT calendrier.REF, SUM(stages.RECETTE) AS recette, SUM(bilan2014.montant) AS depenses
FROM stages,calendrier,bilan2014  
WHERE calendrier.REF=stages.REF
AND Conditions.............  
GROUP BY calendrier.REF
tu joins 3 tables ... et tu n'écris la jointure que de 2...
C'est pas tout simplement ça?

 

Perso,
moi j'écris mes jointures avec inner, left join ,exception join
je trouve ça plus claire à écrire, à comprendre et surtout plus simple à débugger...

 

Guillaume


Message édité par gpl73 le 15-09-2014 à 12:46:48

---------------
mieux vaut être un con au chaud, qu'un con gelé lol
n°2238002
hogz
Posté le 15-09-2014 à 15:05:17  profilanswer
 

Merci pour ta réponse,
 
non, vraiment j'avais essayé  
WHERE calendrier.REF=stages.REF=bilan2014
 
J'ai même essayé
calendrier.REF=stages.REF AND calendrier.REF=bilan2014
 
j'ai aussi réduit mes Conditions pour avancer, mais résultats inexactes.
 
- montant et depenses sont en DECIMAL 10,2
 
J'ai même essayé sur montant quand le champ indiquait 0 mettre dans la condition IS NOT NULL afin de réduire...
 
C'est vrais les jointures s'écrivent en INNER JOIN ou JOIN mais bon là j'ai pris un raccourci :)

n°2238005
mechkurt
Posté le 15-09-2014 à 15:27:07  profilanswer
 

Comme tu jointes sur 2 tables différentes pour tes SUM, peut être que tu as des résultats multiples et du coup il t'additionne plusieurs fois les colonnes ?
 
/my 2 cent


---------------
D3
n°2238007
hogz
Posté le 15-09-2014 à 15:39:24  profilanswer
 

Oui, ça viens surement des SUM...Mais j'ai cherché comment l'écrire pour l'instant je bute....
J'ai essayé de mettre des conditions aux SUM...Pas bon!!! :pt1cable:

n°2238008
mechkurt
Posté le 15-09-2014 à 15:51:08  profilanswer
 

sous requête ou union ?


---------------
D3
n°2238119
hogz
Posté le 17-09-2014 à 07:24:45  profilanswer
 

Résolu avec INNER JOIN et COALESCE.... :bounce:

n°2238170
gpl73
Posté le 18-09-2014 à 08:30:42  profilanswer
 


le coalesce gère juste le fait que ta valeur soit null ou pas... (tu as aussi ifnull(CHAMP, Valeur de remplacement))

 

ce sont tes jointures qui n'étaient pas bonnes :)
le fait d'écrire des inner join fait que tu vois mieux les jointures...
tu as 3 tables avec Ref comme clé,
mais dans ta clause where :
___________________________________
WHERE calendrier. REF=stages.REF
AND Conditions.............  
GROUP BY calendrier. REF
___________________________________
tu ne fais qu'une jointure sur calendrier et stages...
donc produit cartésien sur la troisième table...
et donc des totaux farfelus...
il faut :
________________________________________________
tu y étais presque:
________________________________________________
J'ai même essayé
calendrier.REF=stages.REF AND calendrier.REF=bilan2014
_________________________________________________

 

WHERE
calendrier. REF=stages.REF
and
calendrier.REF=bilan2014.REF (ou stages.REF = bilan2014.REF, à toi de voir)
and
tes conditions ...

 

NB: Faire une table bilan avec un nom qui correspond à l'année, c'est pas terrible , lol... car l'année prochaine, tu fais quoi? tu modifies toute ta BD et ton application avec une table bilan2015?

 


Message édité par gpl73 le 18-09-2014 à 08:33:29

---------------
mieux vaut être un con au chaud, qu'un con gelé lol

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU] SUM & INNER

 

Sujets relatifs
soustractioin de deux SUM[RESOLU] SECLECT SUM et php
utilisation d'une SUM de plusieurs COUNTSUM et GROUP BY ?
Random et limit sur un inner join MySQLSQL
Avoir la fonction "Sum" par défaut dans la table pivotAccess 2007 left join qui fonctionne comme inner join ???
[resolu] top 5 sur inner joinINNER JOIN sous Access2003
Plus de sujets relatifs à : [RESOLU] SUM & INNER


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR