根据累进价格表计算总价

例题描述和简单分析

有数据库表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