2010-09-29 62 views
6

我有這樣的數據:問題在得到總

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 

我想在那個特定行獲得的qty總和:

  • 如果flag是「中」,那麼它會添加總和
  • 如果flag是「out」,那麼它會減去從和

回答

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

我能想到的三種方式來做到這一點。 第一個是帶有if語句的循環,我可能不會使用該選項。

二是使用LINQ做計算,看看這個網站,如果你不知道的Linq http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

你很可能使用的Lamda表達式但我不偉大與他們和我不是100%確定如何去做,但我覺得Lamda Expressions很可能會給你最優雅的解決方案。

+0

這是不同問題的答案嗎?如果不是,則建議將所有數據返回到應用程序,並在存在完美令人滿意的SQL解決方案時使用Linq將其聚合。 – 2010-09-29 09:03:43

+0

感謝你的解決方案非常感謝你 – Rohan 2010-09-29 10:18:54

+0

Martin,我認爲在Linq語句中使用的Linq中將使用where子句,因爲Linq會創建非常好的SQL語句,所以它只會返回所需的記錄。話雖如此,我正在瀏覽C#標籤,並錯過了這個問題實際上是一個sql問題 – TheLukeMcCarthy 2010-09-29 10:25:18