我有这个查询
SELECT
TestPackageId,
SUM(ROUND((Quantity - (QuantityBeforeDone + QuantityExistInSite + QuantitySpool + TotalMIV)), 3)) AS Shortage
FROM ...
短缺值有时是负面的。因此,如果值为负,则应为0。
我该怎么做?
答案 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