calcul de champs

calcul de champs - SQL/NoSQL - Programmation

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  -

Reply

Marsh Posté le 15-04-2014 à 11:39:44   

Reply

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


---------------

Reply

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

Reply

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 ???

Reply

Marsh Posté le 15-04-2014 à 14:12:35    

En gros t'aurais ça
 

Code :
  1. SELECT materiel.CodeMat,
  2.          DesignMat,
  3.          SUM(determiner.QteEntree, 0) AS Sommedesentrees,
  4.          SUM(determier.QteSortie, 0) AS Sommedessorite,
  5.          SUM(determiner.QteEntree) - SUM(determiner.QteSortie),
  6.     FROM materiel, determiner
  7.    WHERE materiel.CodeMat = determiner.Codemat
  8. GROUP BY materiel.CodeMat,DesignMat
  9. ORDER BY materiel.CodeMat;


 
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 ...

Reply

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

Reply

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 :
  1. SELECT materiel.CodeMat,
  2.          DesignMat,
  3.          SUM(determiner.QteEntree, 0) AS Sommedesentrees,
  4.          SUM(determiner.QteSortie, 0) AS Sommedessorite,
  5.          SUM(determiner.QteEntree) - SUM(determiner.QteSortie)
  6.     FROM materiel, determiner
  7.    WHERE materiel.CodeMat = determiner.Codemat
  8. GROUP BY materiel.CodeMat,DesignMat
  9. ORDER BY materiel.CodeMat;


Message édité par xuan-khanh le 15-04-2014 à 15:55:13
Reply

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


Message édité par gpl73 le 16-04-2014 à 15:01:14

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

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);
   


Message édité par makanG le 17-04-2014 à 15:17:04
Reply

Marsh Posté le 17-04-2014 à 15:00:38    

"update materiel set QteStockee=QteStockee-QteSortie"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed