有没有办法找到两列的减法,其中每列可能是正值或负值。
例如
+------+------+------+
| colA | colB | colC |
+------+------+------+
| -100 | 100 | 0 |
| 200 | -200 | 0 |
| -300 | -400 | -100 |
| 200 | 300 | 100 |
+------+------+------+
答案 0 :(得分:4)
如果[colC]是您想要获得的,那么您只需要进行简单的添加,而不是真正的减法:
[ - 300] + [-400] = [-700]
SELECT colA ,colB ,TotalValue = colA + colB 来自你的表;
答案 1 :(得分:1)
这个怎么样?
abs(colA - colB)
abs(colA) + colB
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;