减去两个数字列

时间:2017-11-21 22:16:35

标签: sql sql-server

有没有办法找到两列的减法,其中每列可能是正值或负值。

例如

+------+------+------+
| colA | colB | colC |
+------+------+------+
| -100 |  100 |    0 |
|  200 | -200 |    0 |
| -300 | -400 | -100 |
|  200 |  300 |  100 |
+------+------+------+

3 个答案:

答案 0 :(得分:4)

如果[colC]是您想要获得的,那么您只需要进行简单的添加,而不是真正的减法:

  • [ - 100] + [100] = [0]
  • [ - 300] + [-400] = [-700]

    SELECT colA     ,colB     ,TotalValue = colA + colB 来自你的表;

答案 1 :(得分:1)

这个怎么样?

  • 如果两列都是位置,那么我们将答案作为绝对值,因为它将是一个正整数,如下所示:
    • abs(colA - colB)
  • 如果两列都是负数,我们可以将其中一列作为绝对值,然后像这样添加它们:
    • abs(colA) + colB
  • 如果任一逻辑为假,那么很可能一列是负数而另一列是正数,所以我们可以使用RussellFox的逻辑:
    • colA + colB

所以把它们放在一起:

select colA
       ,colB
       ,colC = case when colA > 0 and colB > 0 then abs(colA - colB)
                    when colA < 0 and colB < 0 then abs(colA) + colB
                    else colA + colB
               end
from mytable

这里有rextester sample供你玩

答案 2 :(得分:0)

这实际上取决于您为构建逻辑而想到的精确要求。

select
, colA
, colB
, abs(abs(colA) - abs(colB)) as Abs_Value
, abs(colA) - abs(colB) as Abs_Value_Diff
, colB - abs(colA) as Abs_Value_Diff2

, case when colA >= 0 and colB >= 0 then colB - colA
    when colA < 0 and colB < 0 then colB - colA
    when colA < 0 and colB >= 0 then colB - abs(colA)
    when colA >= 0 and colB < 0 then abs(colB) - colA
    else colB - colA 
    end as Abs_Value_Diff3
from 
test_table
order by TestField1;
相关问题