根据累进价格表计算总价
例题描述和简单分析
有数据库表ORDERINFO,数据如下所示:
CUST |
ORDERS |
CUST1 |
400 |
CUST2 |
1200 |
CUST3 |
40 |
CUST4 |
2000 |
CUST5 |
700 |
另有数据库表TIER,数据如下所示:
TIER |
LOWER |
HIGHER |
PRICE |
TIER1 |
1 |
250 |
50 |
TIER2 |
251 |
500 |
45 |
TIER3 |
501 |
1000 |
40 |
TIER4 |
1001 |
10000 |
30 |
订单信息表(ORDERINFO)中的每客户(CUST)有N个订单数(ORDERS),针对订单数,到累积折扣表(TIER)里去查询,看每个客户的订单数可折扣几次,最后记录每次折扣,结果如下所示:
CUST |
ORDERS |
CHARGE |
CUST1 |
250 |
50 |
CUST1 |
150 |
45 |
CUST2 |
250 |
50 |
CUST2 |
250 |
45 |
CUST2 |
500 |
40 |
CUST2 |
200 |
30 |
CUST3 |
40 |
50 |
CUST4 |
250 |
50 |
CUST4 |
250 |
45 |
CUST4 |
500 |
40 |
CUST4 |
1000 |
30 |
CUST5 |
250 |
50 |
CUST5 |
250 |
45 |
CUST5 |
200 |
40 |
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A |
|
1 |
=connect("oracle") |
2 |
=A1.query@("SELECT * FROM ORDERINFO") |
3 |
=A1.query@x("SELECT * FROM TIER") |
4 |
=A2.conj((A3.select(LOWER<=A2.ORDERS)).new(A2.CUST,if(HIGHER>=A2.ORDERS,A2.ORDERS-LOWER+1,HIGHER-LOWER+1):ORDERS,PRICE:CHARGE)) |
简要说明:
A1 连数据源为oracle的数据库
A2 返回结果序表
A3 返回结果序表,结束时自动关闭数据库连接
A4 找出每个客户的折扣范围,计算区间内的订单数、折扣,合并所有客户数据
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
https://stackoverflow.com/questions/64131089/divide-a-number-into-multiple-bands
英文版