2009-07-15 6 views
0

Je table avec des données comme suit:requête pour trouver la somme en cours d'exécution d'une colonne (qté) en fonction du type (si « a » ajouter Soustraire autre)

Store  ItemNo  Type Billno Qty 
London  1   A  1  10 
London  1   A  2  5 
London  1   S  1  7 
London  1   A  3  5 
London  1   S  2  7 
London  2   A  1  19 
London  2   S  2  5 
London  2   A  3  11 
Paris  1   A  1  15 
Paris  1   S  2  8 
Paris  1   A  3  9 
Paris  2   A  1  10 
Paris  2   S  2  5 

Maintenant, je veux calculer qte_totale , de telle sorte que qte_totale de qté d'un itemno sous particulier magasin est calculée sur la base de de type. c'est-à-dire si le type est A, la quantité doit être ajoutée au total et si elle est S, soustraite du total comme indiqué ci-dessous. Dans l'exemple ci-dessous pour magasinLondres, itemno ligne 3 est la dernière entrée, de sorte que le qte_totale donne la quantité de courant availble pour cet élément dans ce magasin particulier.

Store  ItemNo  Type BillNo Qty TotalQty 
London  1   A  1  10  10 
London  1   A  2  5  15 
London  1   S  1  7  8 
London  1   A  3  5  13 
London  1   S  2  7  6 
London  2   A  1  19  19 
London  2   A  2  5  24 
London  2   S  3  11  13 
Paris  1   A  1  15  15 
Paris  1   S  2  8  7 
Paris  1   A  3  9  16 
Paris  2   A  1  10  10 
Paris  2   S  2  5  5 
+0

-1 Votre table ne respecte pas la première forme normale (1NF), c'est-à-dire que les données (autres que l'affichage) ne nous indiquent pas que {London, 1, A, 10} est juste avant {London, 1, A, 5}. – onedaywhen

+0

De votre édition, je déduis que votre clé est (Store, ItemNo, BillNo). Dans votre tableau exemple, vous avez {London, 2, A, 1, 8} mais dans vos résultats cela change à {London, 2, A, 1, 19} - est-ce une faute de frappe? – onedaywhen

+0

... en fait, toutes les données pour London 2 changent entre le tableau affiché et les résultats affichés. – onedaywhen

Répondre

3

En supposant que je vous comprends bien, vous devez utiliser l'instruction IIf:

SELECT Store, ItemNo, SUM(IIF(Type = 'A', Qty, 0 - Qty)) AS TotalQty 
FROM MyTable 
GROUP BY Store, ItemNo 

devrait produire les éléments suivants (non testé):

 
Store ItemNo TotalQty 
London  1   8 
London  2   13 
Paris  1   16 
Paris  2   5 
1

Je pense que c'est (je a été confondu, mais ensuite repéré vos données sont incohérentes entre le tableau et les résultats):

SELECT S1.Store, S1.ItemNo, S1.Type, S1.Billno, S1.Qty, 
     (
     SELECT SUM(SWITCH(
          S2.Type = 'A', S2.Qty, 
          S2.Type = 'S', 0 - S2.Qty, 
          TRUE, NULL 
         )) 
      FROM StoreStuff AS S2 
     WHERE S2.Store = S1.Store 
       AND S2.ItemNo = S1.ItemNo 
       AND S2.Billno <= S1.Billno 
     ) AS TotalQty 
    FROM StoreStuff AS S1 
ORDER 
    BY S1.Store, S1.ItemNo, S1.Billno; 
+0

Merci. Votre requête me donne exactement ce que je veux. Mais il y avait un problème parce que je n'avais pas correctement représenté les données dans table.J'ai mis à jour ma table en question.Maintenant dans la table de données vous pouvez voir cette combinaison de Store, Itemno, Billno, Type rend la ligne unique.Nous pouvons avoir même billno dans deux différents 'Type' sous même magasin et Itemno.Pls m'aider avec cela aussi. Merci d'avance .... –

+0

He he: la réponse qui ne vous donne pas ce dont vous avez besoin a plus d'upvotes :) Que diriez-vous de marquer le mien comme une réponse. J'ai ajouté un commentaire à votre question pour votre prochain problème parce que je ne suis pas tout à fait la séquence. – onedaywhen

Questions connexes