Sql server T-SQL:如何计算值的总和
我正在尝试用T-SQL执行计算,但遇到了一些问题。 以下是我想做的:Sql server T-SQL:如何计算值的总和,sql-server,tsql,Sql Server,Tsql,我正在尝试用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
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语法知之甚少,我被困在这里,如果有人能把我推向正确的方向,我将非常感激。谢谢大家! 您可以在不使用变量的情况下进一步简化它:
Select Sum(Case Service
When 'pay_in' Then Amount
When 'pay_out' Then -Amount
End) as Total
From Payment
Where isActive = 1
在
选择
中不需要设置
。尝试:
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
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
如果您将变量命名为@Total而不是@CNT,可能会更好。您在发布之前是否尝试过您的第一个建议?@Frank Kalis:不,我没有尝试过。重新阅读时,您不能在同一查询中选择金额并分配给@cnt,您应该初始化@cnt。不需要初始化@cnt,但可以,您不能在一个select语句中同时进行数据检索和变量分配。:-)