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

TSQL如何计算大于等于OrdQty的最小PackingQuantity整倍数

TSQL 订购量包装倍数适配实现方案

核心计算逻辑

要得到大于等于OrdQty的最小PackingQuantity整倍数,可通过向上取整运算实现,公式为:

CEILING(1.0 * OrdQty / PackingQuantity) * PackingQuantity

公式说明:

  • 乘以1.0是为了将整数运算转为浮点运算,避免TSQL整数除法自动截断小数部分的问题
  • CEILING函数会将小数结果向上取整为最小的大于等于当前值的整数,得到需要的包装倍数乘数
  • 最终用乘数乘以单包装数量,得到合规的订购量

适配后的完整SQL

SELECT 
    VmiItemUpdates.OrdQty, 
    VmiItemPackagingQuantities.Quantity as PackingQuantity,
    -- 新增调整后订购量字段
    CASE 
        WHEN VmiItemPackagingQuantities.Quantity = 0 THEN VmiItemUpdates.OrdQty -- 避免除以0异常,可按业务需求调整返回值
        ELSE CEILING(1.0 * VmiItemUpdates.OrdQty / VmiItemPackagingQuantities.Quantity) * VmiItemPackagingQuantities.Quantity 
    END AS AdjustedOrdQty
FROM vm.VmiItemUpdates 
INNER JOIN vm.VmiItemPackagingQuantities 
    ON VmiItemUpdates.[itemcode] = VmiItemPackagingQuantities.[itemcode]

效果验证

对应示例场景的计算结果符合业务要求:

  • OrdQty=3、PackingQuantity=5 → 计算结果为5
  • OrdQty=5、PackingQuantity=3 → 计算结果为6
  • OrdQty=6、PackingQuantity=3 → 计算结果为6(正好为整倍数时无需调整)

可选模运算实现方案

如果不想用浮点运算,也可以通过模运算判断是否需要进位:

CASE
    WHEN VmiItemPackagingQuantities.Quantity = 0 THEN VmiItemUpdates.OrdQty
    WHEN VmiItemUpdates.OrdQty % VmiItemPackagingQuantities.Quantity = 0 THEN VmiItemUpdates.OrdQty
    ELSE (VmiItemUpdates.OrdQty / VmiItemPackagingQuantities.Quantity + 1) * VmiItemPackagingQuantities.Quantity
END AS AdjustedOrdQty

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:54:04