计算SQL中折扣范围的存在

时间:2014-04-04 14:13:03

标签: sql

我有一个简单的订单表,用于销售的产品,其中包含每个订单折扣的列。例如:

Order Number   DiscountPrcnt
1234           0
1235           10
1236           41

我想要做的是创建一个输出,我可以将订单表加入到客户表中,并通过电子邮件将折扣分组到范围内,如下所示:

Email_Address   0-20  20-50  50-100
joe@abc.com           Yes    Yes
tom@abc.com     Yes   Yes

因此,我们的想法是确定每个客户(此处通过电子邮件指定)是否曾在指定范围内收到折扣,如果没有,则应该为该范围返回NULL。

表结构的简化版本是:

Customer Table:

CustID   Email
123      joe@abc.com
234      tom@abc.com
456      joe@abc.com

因此,电子邮件可以在客户之间重复。

Orders Table:
CustID   OrderID   Amount   DiscPrcnt
123      1234      50.00    0
234      1235      75.00    10
456      1236      20.00    41

1 个答案:

答案 0 :(得分:0)

select c.email, COUNT(o1.order_number),  COUNT(o2.order_number),  COUNT(o3.order_number)
from customer c, order o1, order o2, order o3
where c.CustID = o1.CustId
and c.CustID = o2.CustID
and c.CustID = o3.CustID
and o1.DiscountPrcnt > 0
and o1.DiscountPrcnt <= 20
and o2.DiscountPrcnt > 2
and o2.DiscountPrcnt <= 50
and o3.DiscountPrcnt > 50
and o3.DiscountPrcnt <= 100
group by c.email

您不会按预期获得“是”,而是用户享受折扣的时间。如果没有,则为0。