2010-02-10 87 views
2

我想在T-SQL中執行計算,但遇到了一些問題。 這裏是我想要做的事:T-SQL:如何計算值的總和

DECLARE @CNT money 
SELECT @CNT = 0 

Select Amount, 
     case 
      when Service like 'pay_in' then SET @CNT = @CNT + Amount 
      when Service like 'pay_out' then SET @CNT= @CNT - Amount 
     end 
    from Payment where isActive = 1 

select @CNT 

由於我的T-SQL語法,我呆在這裏的知識貧乏,而且會非常感激,如果有人可以把我在正確的方向。謝謝!

+2

如果您將變量命名爲@Total而不是@CNT,可能會更好。 – shahkalpesh

回答

5

SQL最適合與基於集合的方法。儘量不要通過迭代數據集來解決問題,而是通過聚合它來解決問題。

DECLARE @CNT money 

SELECT 
    @CNT = SUM(
    CASE Service 
     WHEN 'pay_in' THEN Amount 
     WHEN 'pay_out' THEN -1 * Amount 
     ELSE 0 
    END 
) 
FROM 
    Payment 
WHERE 
    isActive = 1 

SELECT @CNT 
4

可以進一步簡化它,而不使用變量:

Select Sum(Case Service 
      When 'pay_in' Then Amount 
      When 'pay_out' Then -Amount 
      End) as Total 
From Payment 
Where isActive = 1 
1

沒有必要爲SET一個SELECT內。嘗試:

set @CNT = 0 

select 
    @CNT = case 
     when Service like 'pay_in' then @CNT + Amount 
     when Service like 'pay_out' then @CNT - Amount 
    end 
from Payment 
where isActive = 1 

或者,沒有一個變量:

Select 
    sum(case 
     when Service like 'pay_in' then Amount 
     when Service like 'pay_out' then -Amount 
    end) as Total 
from Payment 
where isActive = 1 
+0

在發佈之前,您是否真的嘗試了第一個建議? –

+0

@Frank Kalis:不,我沒有嘗試過。重讀它時,您不能在同一個查詢中選擇數量並將其分配給@cnt,並且應該初始化@cnt。 – Andomar

+0

沒有必要初始化@CNT,但是,在單個SELECT語句中不能同時擁有數據檢索和變量賦值。 :-) –