2013-10-13 2 views
0

j'ai un problème pour créer la requête pour la tableCréer sql chaîne de requête

mouventDeStock

|| idMv || dateMv ||qteMv || typeMV(bit) || codeMv || 

type Feild est 0 ou 1 si 0 signifie hors du stock, si 1 signifie moyens d'entrée de Stock

je veux calculer la sorcière qte est égale à

qte = (sum(qteMv) where typeMv = 1) - (sum(qteMv) where typeMv = 0) 

comment je ne peux pas le faire en sql

(select sum(mvQte) from mouvementDeStock 
where (mvType = 1 and mvCode = 'ART_18')) 
- 
(select sum(mvQte) from mouvementDeStock 
where (mvType = 0 and mvCode = 'ART_18') 

mais il ne fonctionne pas du tout

Répondre

1

Try this ...

Select Y.S - X.S As Sum from 
(select sum(qteMv) S from mouventDeStock where typemv=1 and codemv = 'ART_18') Y, 
(select sum(qteMv) S from mouventDeStock where typemv=0 and codemv = 'ART_18') X; 
+0

oui cela fonctionne, mais j'essaie d'assigner la requête n'est pas des œuvres que je veux faire ce table.feild = résultat de la requête; – advseo32

+0

Êtes-vous mettre à jour un enregistrement existant ou insérer dans une nouvelle table? Postez la définition de la table aussi. – unlimit

+0

je veux mettre à jour un seul enregistrement, ma table est sur les produits de vente et l'achat de produits et je les ai separte avec le type de mouvment mvType, et je veux calculer le total (QtySalesProducts) - Total (QtyBuyingProducts) et mise à jour qté dans les produits de table , je l'espère est clair maintenant – advseo32

0

Vous pouvez utiliser les sous-requêtes pour calculer les sous-totaux, mais votre déclaration toute doit être une instruction SQL valide , de sorte que vous devez envelopper une autre SELECT autour d'eux:

SELECT (SELECT SUM(mvQte) FROM mouvementDeStock 
     WHERE mvType = 1 AND mvCode = 'ART_18') 
     - 
     (SELECT SUM(mvQte) FROM mouvementDeStock 
     WHERE mvType = 0 AND mvCode = 'ART_18') 

Si vous voulez être intelligent, vous pouvez le faire avec une somme unique, en faisant tous les contrôles hors stock des valeurs négatives par mvQte les multipliant avec -1:

SELECT SUM(mvQte * CASE mvType WHEN 0 THEN -1 ELSE 1 END) 
FROM mouvementDeStock 
WHERE mvCode = 'ART_18' 

(CASE expression documentation)