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

时间:2015-07-29 13:22:33

标签: sql rounding

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

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

1 个答案:

答案 0 :(得分:0)

将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将返回一个在逗号(小数点)
  • 右侧舍入的数字
  • 小于0将返回一个在逗号左侧舍入的数字(小数点)

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