SQL立方英尺计算公式结果与计算器不符,求排查原因
结果差异的原因分析
核心原因:公式逻辑完全错误
你手动计算时的逻辑是总高度(货物堆叠高度+托盘高度)×托盘长×托盘宽,再转换成立方英尺,正确的计算公式应该是:
(48 * 40 * ((24/24)*16.34 + 6)) / 1728 = 24.82222...
但你写的SQL完全违背了这个逻辑:
- SQL里是把货物高度的数值(16.34)直接和托盘的体积值(64840/1728≈6.666)相加,计算式为:
24/24*16.34 + (6*48*40/1728) = 16.34 + 6.666... = 23.00666...
这相当于把“高度”和“体积”两个不同维度的数值硬加,结果自然和正确逻辑不符。
实际查询的逻辑偏差
你的真实SQL语句也犯了同样的错误:
- 当前逻辑是
(货物堆叠高度) + (托盘体积),完全不是体积计算的正确方式。 - 修正后的正确SQL逻辑应该是:
SELECT ROUND( 48 * 40 * ( (a.std_qty / (SELECT item_qty_bkd_qty_per_lay FROM m_item_d1 b WHERE a.comp_code=b.comp_code and a.cust_code=b.cust_code and a.invt_lev1=b.item_code and b.item_qty_bkd_lev_num=1)) * (SELECT item_qty_bkd_hgt FROM m_item_d1 b WHERE a.comp_code=b.comp_code and a.cust_code=b.cust_code and a.invt_lev1=b.item_code and b.item_qty_bkd_lev_num=2) + 6 ) / 1728, 2 ) as CUBIC_FT FROM c_cart_d a .....
先算出总高度(货物堆叠高度+托盘高度),再乘以托盘的长和宽得到总体积(立方英寸),最后除以1728转换成立方英尺。
运算优先级的隐性误解
你手动计算时可能无意识地给(货物高度+托盘高度)加了括号,但SQL会严格遵循「先乘除、后加减」的运算优先级执行,这直接导致SQL按错误的公式逻辑算出了结果。
内容的提问来源于stack exchange,提问作者mrdiu
相关产品推荐
相关产品推荐

