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
相关产品推荐
相关产品推荐

