我的原始表格如下:
week volume cost
1 11 null
2 32 null
3 80 null
4 75 null
5 50 null
...
51 28 null
我想通过应用更智能的规则来更新费用字段,如下所示:
if volume < 13, then use a rateA (loose shipment price)
if volume >= 13 and < 25, then use a rateB (20' container price)
if volume >= 25 and < 45, then use a rateC (40' container price)
我希望根据&#34;音量&#34;灵活使用3种不同的费率,以获得最低的成本。例如,在第4周,&#34;剩余音量&#34;最初是75,我应该应用一个40&#39容器成本来加载一部分卷。那么&#34;剩余的音量&#34;是30,我应该用一个20&#39的容器成本来装载剩下的一部分。那么&#34;剩余的音量&#34;是5,我应该应用松散的运费价格,继续这样做,直到&#34;剩余的货量&#34;这样做会给我最好的组合,以最大限度地降低每周的成本。因此,需要将while循环应用于&#34; REMAINING VOLUME&#34;这可以说明如何选择不同的费率。
最终更新的表应如下所示:
week volume cost
1 11 rateA
2 32 rateB + rateA
3 80 rateC + rateB + rateA
4 75 rateC + rateB + rateA
5 50 rateC + rateA
...
51 28 rateB + rateA
答案 0 :(得分:0)
如果案例是固定的并且它们的数量很少,以下方法完全正常(无论如何,使用SQL Server;我不知道其他数据库 - 请参阅下面的注释)......
UPDATE #Orders
SET [Cost] = CASE
WHEN 0 * 44 + 0 * 24 + 1 * 12 >= [Volume] THEN 'rateA'
WHEN 0 * 44 + 1 * 24 + 0 * 12 >= [Volume] THEN 'rateB'
WHEN 0 * 44 + 1 * 24 + 1 * 12 >= [Volume] THEN 'rateB + rateA'
WHEN 1 * 44 + 0 + 24 + 0 * 12 >= [Volume] THEN 'rateC'
WHEN 1 * 44 + 0 + 24 + 1 * 12 >= [Volume] THEN 'rateC + rateA'
WHEN 1 * 44 + 1 + 24 + 0 * 12 >= [Volume] THEN 'rateC + rateB'
WHEN 1 * 44 + 1 + 24 + 1 * 12 >= [Volume] THEN 'rateC + rateB + rateA'
ELSE 'too big'
END
FROM #Orders
;
不需要循环!
注意案件的直接进展;如果需要,可以扩展模式以包含更大的权重。
这适用于SQL Server,因为您可以保证使用第一个匹配条件,因此如果它匹配第三个WHEN情况,它将不会尝试评估第四个,第五个等。我不知道这是否是对于其他数据库都是如此。