2010-09-29 14 views
6

Ich habe diese Daten:Problem in Summe immer

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 

Ich mag zu dieser bestimmten Zeilensumme von qty erhalten:

  • Wenn flag ist "in", dann wird es hinzufügen zu der Summe
  • wenn flag "out" ist, dann wird es subtrahieren aus der Summe

Antwort

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

Ich denke an drei Möglichkeiten, kann dies zu tun. Die erste ist eine Schleife mit einer if-Anweisung, ich würde diese Option wahrscheinlich nicht verwenden.

Die zweite ist Linq zu verwenden, um die Berechnung zu tun, diese Website überprüfen, ob Sie wissen, Linq nicht http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

Sie könnten wahrscheinlich aber Lamda Ausdrücke verwenden, die ich mit ihnen nicht so toll und ich bin nicht 100% sicher, wie es geht, aber ich denke, dass Lamda Expressions Ihnen die eleganteste Lösung geben wird.

+0

Ist das eine Antwort auf eine andere Frage? Wenn nicht, dann -1 für den Vorschlag, alle Daten zurück zur Anwendung zu bringen und Linq zu verwenden, um sie zu aggregieren, wenn eine vollkommen zufriedenstellende SQL-Lösung existiert. –

+0

Vielen Dank Jungs Lösung Vielen Dank – Rohan

+0

Martin, ich nahm an, dass eine Where-Klausel in der Linq verwendet in der Linq-Anweisung verwendet würde, die nur die erforderlichen Datensätze zurückgeben würde, da Linq ziemlich gute SQL-Anweisungen erstellt. Nachdem ich gesagt habe, dass ich das C# -Tag durchgesehen habe, habe ich verpasst, dass diese Frage tatsächlich eine SQL-Frage war. – TheLukeMcCarthy