SQL Server 2016中先托盘后箱计算可用量整数值的实现问询
SQL Server 2016 实现托盘与箱数计算
原始数据
| Available | qty/pallet | qty/box |
|---|---|---|
| 4800 | 2400 | 120 |
| 1500 | 1000 | 100 |
| 300 | 2000 | 100 |
需求说明
新增pallets和boxes两列,计算逻辑:
- 用
Available除以qty/pallet取整数部分,得到完整托盘数 - 剩余数量再除以
qty/box取整数部分,得到完整箱数(结果仅保留整数,不四舍五入)
目标结果
| Available | qty/pallet | qty/box | pallets | boxes |
|---|---|---|---|---|
| 4800 | 2400 | 120 | 2 | 0 |
| 1500 | 1000 | 100 | 1 | 5 |
| 300 | 2000 | 100 | 0 | 3 |
SQL 实现方案
基础版本(假设除数不为0)
SELECT Available, [qty/pallet], [qty/box], -- 计算完整托盘数:整数除法自动截断小数 Available / [qty/pallet] AS pallets, -- 先取剩余数量,再计算完整箱数 (Available % [qty/pallet]) / [qty/box] AS boxes FROM YourTableName; -- 替换为实际表名
防除数为0版本(更健壮)
如果存在qty/pallet或qty/box为0的情况,可通过CASE语句处理:
SELECT Available, [qty/pallet], [qty/box], CASE WHEN [qty/pallet] = 0 THEN 0 ELSE Available / [qty/pallet] END AS pallets, CASE WHEN [qty/box] = 0 THEN 0 ELSE (Available % [qty/pallet]) / [qty/box] END AS boxes FROM YourTableName; -- 替换为实际表名
逻辑说明
- SQL Server 中整数间的除法运算会自动截断小数部分,直接得到符合要求的整数结果
%是取模运算符,用于计算分配完托盘后剩余的货品数量
内容的提问来源于stack exchange,提问作者VQB
相关产品推荐
相关产品推荐

