如何在 SQL SELECT 语句中舍入此结果

How to round this result in SQL SELECT statement

我需要一种方法来舍入从以下语句返回的结果:

CASE 
    WHEN 0 <> (sod.XDFFLT - sod.DUEQTY)
        THEN (sod.XDFFLT - sod.DUEQTY)
    ELSE ''
    END AS Balance

它位于此 SELECT 语句中。

SELECT TOP (10000) som.ORDNUM
    ,som.NAME
    ,som.ADDR1
    ,som.ADDR2
    ,som.CITY
    ,som.STATE
    ,som.ZIPCD
    ,som.CNTRY
    ,som.CUSTPO
    ,COALESCE(cpd.CUSTPRT, sod.PRTNUM) AS CustomerSku
    ,cpd.CUSTPRT
    ,som.CUSTID
    ,sod.PRTNUM
    ,ps.PMDES1
    ,sod.CURQTY
    ,sod.DUEQTY
    ,sod.XDFFLT
    ,sod.SHPQTY
    ,CASE 
        WHEN 0 <> (sod.XDFFLT - sod.DUEQTY)
            THEN (sod.XDFFLT - sod.DUEQTY)
        ELSE ''
        END AS Balance
    ,sod.LINNUM + sod.DELNUM AS LineDelNum
    ,CASE 
        WHEN 12 <= len(sod.UDFREF)
            THEN substring(sod.UDFREF, 9, 4)
        ELSE sod.UDFREF
        END AS Skid

将 CASE 替换为:

,CASE 
    WHEN 0 <> (sod.XDFFLT - sod.DUEQTY)
        THEN ROUND((sod.XDFFLT - sod.DUEQTY), <number_of_decimals>)
    ELSE NULL
    END AS Balance

确保将 <number_of_decimlas> 替换为您希望数字四舍五入到的适当小数位数。

  • 大于 0 将 return 一个在逗号(小数点)右侧四舍五入的数字
  • 小于0会return一个在逗号(小数点)左边四舍五入的数字

此外,不要在案例的 ELSE 子句中使用空白字符串,因为这会导致数据类型不匹配并产生错误(CASE 必须 return 一个 单一 数据类型)。因此,最好将其替换为 NULL,因为您的第一个条件总是 return 一个数字。