2010-09-29 3 views
6

J'ai ces données:problème à obtenir Somme

name qty  date     flag 
---------------------------------------------  
abc  255  11/10/1986 12:00:00 AM IN 
abc  300  11/10/2010 12:00:00 AM IN 
abc  12  11/10/2012 12:00:00 AM OUT 
abc  13  11/9/2010 12:00:00 AM OUT 
NULL NULL NULL     NULL 

Je veux obtenir la somme de qty à cette ligne spécifique:

  • Si flag est « dans », puis il ajouter à la somme
  • si flag est "out", alors il va soustraire de la somme

Répondre

13
SELECT SUM(case flag when 'IN' then qty else -qty end) 
from table 
WHERE ..... Your conditions here ... 
-1

je peux penser à trois façons de le faire. La première est une boucle avec une instruction if, je n'utiliserais probablement pas cette option.

La seconde est d'utiliser LINQ pour effectuer le calcul, consultez ce site si vous ne connaissez pas Linq http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

Vous pouvez probablement utiliser des expressions Lamda mais je ne suis pas très bien avec eux et je suis Je ne suis pas sûr à 100% de la façon de procéder, mais je pense que Lamda Expressions vous donnera probablement la solution la plus élégante.

+0

Est-ce une réponse à une autre question? Si ce n'est pas le cas -1 pour suggérer de ramener toutes les données à l'application et d'utiliser Linq pour les agréger lorsqu'une solution SQL parfaitement satisfaisante existe. –

+0

Merci Guys Solution J'ai beaucoup travaillé – Rohan

+0

Martin, j'ai supposé qu'une clause where serait utilisée dans le Linq utilisé dans l'instruction Linq, qui ne retournerait que les enregistrements requis car Linq crée de très bonnes instructions SQL. Ayant dit que je regardais à travers la balise C# et manqué que cette question était en fait une question sql – TheLukeMcCarthy

Questions connexes