我有一个简单的订单表,用于销售的产品,其中包含每个订单折扣的列。例如:
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
答案 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。