如何找到A字段等于或大于b字段的最小倍数



我正在寻找一种方法来找到PackingQuantity的最低倍数(包括* 1),大于或等于OrdQty(见下面的代码)。从功能上讲,每个订购数量必须是物品包装数量的一个倍数。

如果orderqty = 3且PackingQuantity = 5,则orderqty必须变为5。

如果orderqty = 5且PackingQuantity = 3,则orderqty必须变为6。

等等……

SELECT VmiItemUpdates.OrdQty, VmiItemPackagingQuantities.Quantity as PackingQuantity 
FROM vm.VmiItemUpdates 
INNER JOIN vm.VmiItemPackagingQuantities ON VmiItemUpdates.[itemcode] = VmiItemPackagingQuantities.[itemcode]

但我正在努力寻找在TSQL中做到这一点的逻辑方法。谁能给我点提示吗?

找到OrdQty / PackingQuantity的比率,并使用CEILING()四舍五入到最接近的整数,并与PackingQuantity乘回

NewOrdQty = CEILING(OrdQty * 1.0 / PackingQuantity) * PackingQuantity 

一种方法是使用模将PackingQuantityOrdqty的模差相加。

对于OrdQty5PackingQuantity3,需要设置为6OrdQty模取PackingQuantity的结果是2,然后从PackingQuantity中减去1,最后加上OrdQty,得到6:

SELECT OrdQty,
PackingQuantity,
OrdQty + PackingQuantity - ISNULL(NULLIF(OrdQty % PackingQuantity,0),PackingQuantity) AS RequiredOrdQty
FROM (VALUES(3,5),
(5,3),
(7,4),
(3,10),
(17,7))V(OrdQty,PackingQuantity)

(幸运的)ISNULL/NULLIF存在,因为x % x的值是0而不是x;如果我们没有"互换"将0改为x,那么当这些值四舍五入时,您将最终打包一个额外的数量。

最新更新