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,这意味着所有数字都应该被解读为正数。