【发布时间】:2014-10-23 18:26:58
【问题描述】:
我正在尝试获取几个字段的总和,以便现在四舍五入到另一列中整数的下一个倍数。
一个例子是:这些选择列的总和是 15。我想要比较的列是 13。我希望 SUM 然后向上舍入到 26,因为它是 13 的下一个倍数涵盖总和。每个Item的总和和比较列都会不同,所以我希望找到一个可以根据Item/Loc进行计算的SQL。
我已经能够使 SUM 工作,但不知道如何将此数字连接到比较字段/表格,然后将其四舍五入。任何帮助将不胜感激,无论是如何从不同的表连接两个字段,或者如何舍入到特定的倍数。两者都会让我更接近我的最终目标。
我当前的 SQL 是这样的
select s.Item,
s.Loc,
p.MinDRPQty,
p.IncDRPQty,
SUM (s.OH + s.UDC_ActualIT + s.UDC_CommitIT
- s.UDC_AllCustOrd s.UDC_ADJ_AvgDailyDmd
*(p.DRPCovDur/1440) - s.UDC_SafetyStock)
as NetNeed
from SKU s,
SKUPlanningParam p
where s.Item = p.Item and s.Loc = p.Loc
group by s.Item, s.Loc, p.MinDRPQty, p.IncDRPQty
MinDRPQty 是我与 SUM (NetNeed) 比较的数字
这部分工作,在获得总和。我认为我需要使用 CASE 或 IF 才能使其工作,但我并不精通这些。
在 Daileyo 的帮助下,我离我想要的更近了。我现在的问题是脚本在使用多个表时不想工作。我需要这两个表来收集我的所有数据,这样做时会出错。
我修改后的脚本看起来像
SELECT
Item, Loc,
orig as "NetNeed",
mult as "MinDRPQty",
(orig/mult) as "multiples_needed",
CASE
WHEN (orig/mult) <= 1 THEN mult --always use next multiple if sum is < than multiplier
ELSE CEIL(orig/mult)*mult --determine appropriate multiple, convert to int, and multiply
END AS "ExpectedOrder"
FROM
(
SELECT s.Item, s.Loc, SUM(s.OH + s.UDC_ActualIT + s.UDC_CommitIT - s.UDC_AllCustOrd - s.UDC_ADJ_AvgDailyDmd*(p.DRPCovDur/1440) - s.UDC_SafetyStock) as orig, p.MinDRPQty as mult
FROM SKU s, group by s.Item, s.Loc
)
谢谢!
【问题讨论】: