calcul de champs - SQL/NoSQL - Programmation
Marsh Posté le 15-04-2014 à 11:54:56
ton group by doit contenir tous les champs non agrégés ( pas dans un SUM,AVg,MIN,MAX,..) , donc au lieu de group by DesignMat, tu dois avoir group by designmat, codemat et tu dois ajouter deisgnmat dans la liste des champs sélectionnés
au passage, ce serai pas mal de dire quel message d'erreur tu as
Marsh Posté le 15-04-2014 à 13:25:56
le order by se met après le group by
quelle base de donnée ?
pour moi le sum(qte,0) n'est pas un bon ordre mais sum(qte) suffit normalement
Marsh Posté le 15-04-2014 à 14:04:49
Donc comme dit précédemment le group by doit contenir tous les champs non agrégés, le order by après le group by.
"Siroter un Fameux Whisky Garantis un Homme Odieux"
Et en parlant de Fameux Whisky il est où le From et le Where avec tes jointures ???
Marsh Posté le 15-04-2014 à 14:12:35
En gros t'aurais ça
Code :
|
Mais de toute façon entre le résultat que tu voulais et ce que tu as écrit il y a déjà un décalage ...
Marsh Posté le 15-04-2014 à 15:29:31
Bonjour Xuan-khanh
je viens de saisir le code que vous m'avez envoyer et le message d'erreur suivant apparaît après la compilation.
error 1064 ( 42000): you have an error in your sql syntax;chek the manual that correspond to your MySQL server version for th right syntax to use near 'o> AS Sommedesentrees,
SUM(determier.QteSortie, 0) AS Sommedessorite,
SUM(determiner.QteEntree) - SUM(determiner' at line 1
Au fait je suis sous MySQL et je suis au tout début avec la programmation
Marsh Posté le 15-04-2014 à 15:54:52
Il y avait une faute d'orthographe dans la requête (bah oui j'ai repris iso-bêtise ^^)
Code :
|
Marsh Posté le 16-04-2014 à 14:26:18
bonjour,
ton sql n'est pas trop dur à écrire (faut juste relire tes cours )
mais les sql proposés te remontent 12 et non 22 (et si tu n'as pas de fiche d'appro pour le materiel, tu n'auras rien...)
SELECT a.CodeMat, a.DesignMat,
SUM(a.QteEntree, 0) AS Sommedesentrees,
SUM(a.QteSortie, 0) AS Sommedessorite,
a.QteStockée +SUM(b.QteEntree) - SUM(b.QteSortie)
FROM materiel as a left outer join determiner as b
on a.CodeMat = b.Codemat
GROUP BY a.CodeMat,a.DesignMat
ORDER BY A.CodeMat
Autrement :
Est ce que tes tables avec les notions qui y sont rattachées sont "réalistes"?
Peut-on sur une fiche de réappro faire de l'entrée et de la sortie pour une même produit ?
C'est pas bien unitaire comme action...
Si c'est vraiement le cas, le plus simple après c'est de te faire un champ calculé dans ta table déterminer qui reprend la différence (entre entrée sortie) et de ne sommer plus que ce nouveau champ avec la qté en stock...
Guillaume
Marsh Posté le 17-04-2014 à 14:58:40
merci beaucoup à tous en fait j'utilise jsp et mysql
j'ai eu la solution
il s'agit de la commande update sous MySQL
et voilà comment j'ai procédé
1 - PreparedStatement pst1=null;
try{
pst1=con.prepareStatement("update materiel set qtestock=qtestock+? where(codemat=?)" );
pst1.setString (1, QteEnt);
pst1.setString (2,CodeMat);
2 - PreparedStatement pst2=null;
try{
pst2=con.prepareStatement("update materiel set qtestock=qtestock-? where(codemat=?)" );
pst2.setString (1, QteSort);
pst2.setString (2,CodeMat);
Marsh Posté le 15-04-2014 à 11:39:44
bonjour tout le monde, je suis à la recherche de la manière de calcul d'un champs
en effet voilà à quoi ressemble ce que je veux:
1 - table materiel
CodeMat DesignMat UnitMat QteStockée
1 bic paquet 10
2 - table determiner
Codemat NumFicheAppro QteEntree QteSortie
1 1 20 8
je dois avoir comme resultat
CodeMat DesignMat QteEntree QteSortie QteStockée
1 bic 20 8 22
j'ai saisie le code suivant mais cela m'affiche une erreur
1 - SELECT materiel.CodeMat, SUM(determiner.QteEntree, 0) AS Sommedesentrees,
2 - SUM(determier.QteSortie, 0) AS Sommedessorite,
3 - Sum(determiner.QteEntree) - SUM(determiner.QteSortie),
4 - ORDERBY (materiel.CodeMat),
5 - GROUP BY DesignMat;
2 -