如果在sql server中小于零,则将值设置为0

时间:2016-10-06 12:38:12

标签: sql-server

我有这个查询

SELECT
    TestPackageId,
    SUM(ROUND((Quantity - (QuantityBeforeDone + QuantityExistInSite + QuantitySpool + TotalMIV)), 3)) AS Shortage
FROM ...

短缺值有时是负面的。因此,如果值为负,则应为0。

我该怎么做?

4 个答案:

答案 0 :(得分:2)

案例表达是要走的路:

   CASE WHEN SUM(ROUND((Quantity - (QuantityBeforeDone + QuantityExistInSite + QuantitySpool + TotalMIV)), 3)) < 0 then 0 else SUM(ROUND((Quantity - (QuantityBeforeDone + QuantityExistInSite + QuantitySpool + TotalMIV)), 3)) end

答案 1 :(得分:1)

使用公式

(SUM(ROUND((
   Quantity - (QuantityBeforeDone + QuantityExistInSite + QuantitySpool + TotalMIV)), 3))+ 
 ABS(SUM(ROUND((
 Quantity - (QuantityBeforeDone + QuantityExistInSite + QuantitySpool + TotalMIV)), 3)))) / 2

答案 2 :(得分:0)

您需要使用

  

案例表达

以下是一个例子:

case when value = 0 then 'zero' when value < 0 then 'negative' else 'positive' end

答案 3 :(得分:0)

对于那些喜欢用短线而不是长CASE语句或在ABS()中复制值的人(公式逻辑可能会改变一天,并且不必忘记在代码中的任何地方进行更改等)。

使用isnull(nullif(sign({column name}),-1),0)

select isnull(nullif(sign(-100),-1),0) as negative
select isnull(nullif(sign(0),-1),0) as zero
select isnull(nullif(sign(100),-1),0) as positive