2013-04-24 79 views
0

我想計算箱數量/最小訂單數量,需要一點幫助。計算箱數量T-SQL

如果說我有386所需的數量,但箱子的數量是500,我需要回到500的訂單數量

像明智的,如果需要的數量是540和箱量500我需要回到1000的訂單數量

我需要這是在SQL

任何幫助,將不勝感激

提前

非常感謝

+2

涉及表格的示意圖和示例數據? – 2013-04-24 12:02:04

回答

3

一個簡單的可重複使用的計算箱數量的函數。

CREATE FUNCTION udf_CalculateBoxQuantity 
(
    @RequiredAmount INT, 
    @BoxQuantity INT 
) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @Ret INT 

    SET @Ret = @BoxQuantity * CEILING((CAST(@RequiredAmount AS DECIMAL(20,10))/CAST(@BoxQuantity AS DECIMAL(20,10)))) 

    RETURN @Ret 
END 
+0

在使用整數除法時,使用類型轉換和天花板似乎資源效率低下,可能會執行相同的技巧。標量函數也不能很好地處理設置的邏輯,所以如果你想要一個可以與集合很好地工作的可重用函數,那麼你應該使它成爲一個表值函數(有一行和一列),以便你可以使用CROSS APPLY。 – 2013-04-24 12:50:54

+0

即插即用 - 完美 David,感謝您的解決方案和上述建議,但是我並未將此應用於10萬億行,因此性能可以忽略不計 – 2013-04-24 13:15:53

0

好問題。

我會這樣解決它,試用@reqQuantity的不同值來看它是如何工作的。

DECLARE @reqQuantity INT = 386 
,@boxSize INT = 500 
SELECT CASE WHEN @reqQuantity % @boxSize = 0 THEN @reqQuantity ELSE (@reqQuantity/@boxSize+1)*@boxSize END AS OrderQuantity