You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何将‘Layers Ordered’列格式化为保留2位小数?

解决SQL查询中"Layers Ordered"列保留两位小数的问题

问题根源在于整数除法:当两个整数类型的字段相除时,数据库会直接截断小数部分返回整数结果,后续再用ROUND函数也无法找回丢失的小数信息。

以下是修改后的完整SQL语句,重点调整了除法运算的类型转换,确保结果保留两位小数:

select distinct shipment.ship_id "Shipment",
        ord_line.ordnum "Order",
        ord_line.ordlin "Order Line",
        ord_line.prtnum "Item",
        ROUND(ord_line.ordqty * 1.0 / prtftp_view.untcas, 2) "Cases Ordered",
        ROUND(prtftp_view.untlay * 1.0 / prtftp_view.untcas, 2) "Cases Per Layer",
        ROUND(
            (ord_line.ordqty * 1.0 / prtftp_view.untcas) 
            / 
            (prtftp_view.untlay * 1.0 / prtftp_view.untcas), 
            2
        ) "Layers Ordered",
        case when ord_line.prtnum in (select distinct prtnum
                                        from inventory_view
                                       where inventory_view.stoloc like 'LP%A') then 'Yes'
             else 'No'
        end "Item Slotted Layer"
   from car_move
   join shipment
     on shipment.aesitn = car_move.host_ext_id
   join ord_line
     on ord_line.rt_adr_id = shipment.rt_adr_id
   join prtftp_view
     on prtftp_view.prtnum = ord_line.prtnum
  where car_move.car_move_id in ('LD00030697', 'LD00030627', 'LD00030629')
    and prtftp_view.ftpcod not like '%SAP'
    and prtftp_view.wh_id = 'US_5035'
  order by shipment.ship_id,
        ord_line.ordnum,
        ord_line.ordlin

关键修改说明:

  • 在除法运算前给其中一个整数字段乘以1.0,强制将其转换为浮点型,触发数据库执行浮点除法,保留运算过程中的小数部分。
  • 对每个除法结果使用ROUND(..., 2)函数,确保最终输出保留两位小数。

如果你的数据库支持CAST或CONVERT函数,也可以用CAST(ord_line.ordqty AS DECIMAL(10,2))替代ord_line.ordqty * 1.0,效果完全一致。

内容的提问来源于stack exchange,提问作者Davis Middeke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:37:36