Sql server 在SQL Server中反转某些值
我有一张这样的桌子:Sql server 在SQL Server中反转某些值,sql-server,Sql Server,我有一张这样的桌子: ID | Description | Account | DepAccount | Value ---------------------------------------------------------- 0 | Something | 110 | 0 | 500,50 1 | Something x | 0 | 110 | -320,95 现在我需
ID | Description | Account | DepAccount | Value
----------------------------------------------------------
0 | Something | 110 | 0 | 500,50
1 | Something x | 0 | 110 | -320,95
现在我需要一个查询来求和这些值,但它有一个问题
就像在这个例子中一样,如果帐户是110,这很好,如果depcount
是110,我需要反转这个值,所以我求和320,95,而不是-320,95
因此,查询应该返回值:821,45
比如:
SELECT SUM(Value) As Total
FROM Table
WHERE Account = 110 OR DepAccount = 110 WHERE etc...
谁能帮忙?我使用的是SQLServer2008Express版
SELECT SUM(ABS(Value)) As Total FROM Table WHERE Account = 110 OR DepAccount = 110 WHERE etc
这应该能满足你的需要。abs函数返回数字的绝对值。也许我过于简单化了,但您可以这样做:
select sum(abs(Value)) as Total
from Table
where Account = 110
or DepAccount = 110
样本集很小,因此不太清楚您想做什么,但听起来是这样的:
SELECT
sum(case
when Account = 110 then Value
when DepAccount = 100 then -1 * Value
else 0
end)
from MyTable
这就假定“反转”意味着“反转符号”。如果你只需要将负片变成正片,那么使用
SELECT
sum(case
when Account = 110 then Value
when DepAccount = 100 then abs(Value)
else 0
end)
from MyTable
假设Account和DepAccount中的一个始终为0,则可以写入
SELECT
CASE
WHEN DepAccount = 0 THEN Account
WHEN Account = 0 THEN DepAccount
END AS acct,
SUM(abs(Value)) AS Total
FROM Table
GROUP BY
CASE
WHEN DepAccount = 0 THEN Account
WHEN Account = 0 THEN DepAccount
END
如果Account或DepAccount不是110,该怎么办?如果两者都设置了怎么办?当DepAccount=110时,是否始终要反转该值?因此,如果值为100,20,并且DepAccount=110,您将添加-100,20。不,我只想在DepAccount为110ow时反转,并且,如果值为正值,我需要对负值求和。举个例子:如果Depaccount=110,Value=500,我需要-500,所以如果Depaccount=110Abs总是使其为正(这可能是这里想要的),则始终反转该值,但它不会“反转”,如果为正,则将保持为正,而不是反转为负。@pstrjds,根据他的问题,他真的不想倒装。他告诉我们他希望总数是821,45,这意味着所有数字都应该被解读为正数。