在SQL Server中反转某些值

时间:2010-12-14 19:15:57

标签: sql-server

我有一张像这样的表:

ID   |   Description  |  Account  |  DepAccount  |  Value
----------------------------------------------------------
0    |  Something     | 110       | 0            | 500,50
1    |  Something x   | 0         | 110          | -320,95

现在我需要一个查询来对值进行求和,但它存在问题。

就像在示例中一样,如果帐户是110,那很好,如果DepAccount是110,我需要反转这个值,所以我总和320,95而不是-320,95

因此查询应该返回值:821,45

类似于:

SELECT SUM(Value) As Total 
FROM Table 
WHERE Account = 110 OR DepAccount = 110 WHERE etc...

谁可以提供帮助?我正在使用SQL Server 2008 Express Edition

4 个答案:

答案 0 :(得分:2)

样本集很小,所以你有点不清楚你要做什么,但听起来像这样:

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

答案 1 :(得分:0)

SELECT SUM(ABS(Value)) As Total FROM Table WHERE Account = 110 OR DepAccount = 110 WHERE etc

应该能满足您的需求。 abs函数返回数字的绝对值。

答案 2 :(得分:0)

也许我过于简单了,但你能做到这一点:

select sum(abs(Value)) as Total
    from Table
    where Account = 110
        or DepAccount = 110

答案 3 :(得分:0)

假设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