我正在寻找一种方法来找到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
一种方法是使用模将PackingQuantity
与Ordqty
的模差相加。
对于OrdQty
的5
和PackingQuantity
的3
,需要设置为6
。OrdQty
模取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
,那么当这些值四舍五入时,您将最终打包一个额外的数量。