2010-09-29 6 views
6

Ho questi dati:Problema nell'ottenere Somma

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 

voglio ottenere somma di qty in quel preciso fila:

  • Se flag è "in", allora sarà aggiungere alla somma
  • se flag è "out", quindi sarà sottrarre dalla somma

risposta

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

Mi vengono in mente tre modi per fare questo. Il primo è un ciclo con un'istruzione if, probabilmente non userei quell'opzione.

Il secondo è quello di utilizzare Linq per fare il calcolo, controllare questo sito web se non si conosce Linq http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

Si potrebbe forse usare Lamda Espressioni però io non sono grande con loro e io sono Non sono sicuro al 100% come procedere, ma ritengo che Lamda Expressions probabilmente ti darà la soluzione più elegante.

+0

È questa una risposta a un'altra domanda? Se no allora -1 per il suggerimento di riportare tutti i dati all'applicazione e usare Linq per aggregarli quando esiste una soluzione SQL perfettamente soddisfacente. –

+0

Grazie Soluzione di ragazzi grazie mille – Rohan

+0

Martin, ho ipotizzato che una clausola where sarebbe stata utilizzata nella Linq utilizzata nell'istruzione Linq, che restituirebbe solo i record richiesti poiché Linq crea delle istruzioni SQL piuttosto buone. Detto questo, stavo guardando attraverso il tag C# e ho perso che questa domanda era in realtà una domanda sql – TheLukeMcCarthy