代码之家  ›  专栏  ›  技术社区  ›  Alexander

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

  •  1
  • Alexander  · 技术社区  · 8 年前

    我在一个查询中有一个[Preko]列,它计算两列之间的差。如果这个数字是负数,我需要把它显示为正,如果它是正的,它应该保持不变。我不能用腹肌。我试过这个案子,但没有成功。 我遇到的问题是列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 回复  |  直到 8 年前
        1
  •  2
  •   Matthew Baker    8 年前

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

      CASE WHEN Preko<0 THEN 0 ELSE Preko END
    

      CASE WHEN Preko<0 THEN -Preko ELSE Preko END
    

    这似乎更符合你的逻辑,这取决于你想如何处理消极因素。

        2
  •  2
  •   Matthew Baker    8 年前

        3
  •  1
  •   Matthew Baker    8 年前
    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