如果列中的数字为负数,则显示为正数,否则显示数字

时间:2017-10-27 12:28:58

标签: sql-server tsql case iif

我在查询中有[Preko]列计算两列之间的差异。如果数字为负数,我需要显示为正数,如果是正数,则应该保持不变。我可以&# 39;在这一个中使用ABS。我尝试了这个案例,但它没有用。 我得到的问题是列Preko无效。

这是我第二次尝试使用iif的代码:

SELECT FP.Firma
      ,FP.NazFirme
      ,FP.Konto
      ,FP.NazivKonta
      ,FP.Partner
      ,FP.NazivPartnera
      ,Sum(FP.Duguje) AS dug
      ,Sum(FP.Potrazuje) AS pot
      ,Sum(IIf([FP].[Konto] Like '2*'
      ,[duguje]-[potrazuje]
      ,[potrazuje]-[duguje])) AS USaldo
      ,Sum(IIf([datumval]<= '1.1.2017'
      ,IIf([FP].[Konto] Like '2*'
      ,[duguje]-[potrazuje]
      ,[potrazuje]-[duguje]),0)) AS [Preko]
      ,IIf([Preko]<0,0,[Preko]) AS Preko1
FROM tblFinansijskiPodaci FP
Where FP.Firma = 1 
AND FP.Partner=1110
GROUP BY FP.Firma
        ,FP.NazFirme
        ,FP.Konto
        ,FP.NazivKonta,
        ,FP.Partner
        ,FP.NazivPartnera 
HAVING (((FP.Konto)=2040))

3 个答案:

答案 0 :(得分:2)

您也可以使用case语句而不是iif部分。

  CASE WHEN Preko<0 THEN 0 ELSE Preko END

  CASE WHEN Preko<0 THEN -Preko ELSE Preko END

这似乎更符合您的逻辑,具体取决于您希望如何处理否定数据。

答案 1 :(得分:1)

同意HoneyBadger - ABS是获取ABS(-1)返回的方法1.查看APEX SQL工具以获得快速格式化选项。它是免费的,使你的代码更容易阅读,这意味着你会发现你得到更多的答案。

答案 2 :(得分:1)

WITH cte AS (
SELECT FP.Firma
      ,FP.NazFirme
      ,FP.Konto
      ,FP.NazivKonta
      ,FP.Partner
      ,FP.NazivPartnera
      ,Sum(FP.Duguje) AS dug
      ,Sum(FP.Potrazuje) AS pot
      ,Sum(IIf([FP].[Konto] Like '2*'
      ,[duguje]-[potrazuje]
      ,[potrazuje]-[duguje])) AS USaldo
      ,Sum(IIf([datumval]<= '1.1.2017'
      ,IIf([FP].[Konto] Like '2*'
      ,[duguje]-[potrazuje]
      ,[potrazuje]-[duguje]),0)) AS [Preko]
FROM tblFinansijskiPodaci FP
Where FP.Firma = 1 
AND FP.Partner=1110
GROUP BY FP.Firma
        ,FP.NazFirme
        ,FP.Konto
        ,FP.NazivKonta,
        ,FP.Partner
        ,FP.NazivPartnera 
HAVING (((FP.Konto)=2040))
)
SELECT *, CASE WHEN Preko<0 THEN 0 ELSE Preko END preko1 FROM cte