Bad*_*mer 3 sql oracle oracle10g
我有一个oracle 10g数据库,它有2个表:一个REBATES表和一个ORDERS表.
REBATES表看起来像这样:
| rebate_percentage | min_purchase |
------------------------------------
| 1.0 | 5000 |
| 1.5 | 7000 |
| 2.0 | 11000 |
| 5.0 | 20000 |
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据总订单确定要应用的回扣百分比.我知道如何在特定时间范围内找到特定客户的所有订单总和,但我如何在一个查询中获取折扣百分比?
例如,如果订单总数是16,000,那么我如何构造一个获取该值的查询,将其与REBATES表进行比较,并返回2.0?
Gor*_*off 10
在我看来,最简单的方法是如果您有最小和最大购买金额:
select rebate_percentage, min_purchase,
(lead(min_purchase, 1) over (order by min_purchase) - 1) as max_purchase
from rebates
Run Code Online (Sandbox Code Playgroud)
然后你可以在join之间做一个简单的连接条件,如下所示:
on totalorders between rebates.min_purchase and rebates.max_purchase
Run Code Online (Sandbox Code Playgroud)
您可以使用修改的连接条件处理最终情况(使用NULL):
on totalorders >= rebates.min_purchase and
(totalorders <= rebates.max_purchase or rebates.max_purchase is null)
Run Code Online (Sandbox Code Playgroud)
或者,通过更改原始逻辑以在引导函数上具有一些非常大的值的coalesce().
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |