根据累进价格表计算总价

例题描述和简单分析

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