sq语句求教

[复制链接]
查看11 | 回复2 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
有一客户购买产品记录表,表结构如下
客户ID,支付方式,产品ID,以及其他字段....
客户可以采用任意的支付方式购买任意的产品
现在要统计符合一些条件的客户ID
条件组合是由支付方式以及产品的关系任意组合
比如:
1.以支付方式A购买过产品A或者以支付方式B购买过产品A
2.以支付方式A购买过产品A并且以支付方式B购买过产品A
3.没用支付方式A购买过产品A并且以支付方式B购买过产品A
4.以支付方式A购买过产品A并且以支付方式A购买过产品B并且以支付方式B购买过产品A
5.(以支付方式A购买过产品A并且以支付方式A购买过产品B ) 或者以支付方式B购买过产品A
...
也就是说
同一种支付方式对应于一种产品可以是购买过或没购买过,同一种支付方式对于多个产品
的购买状态之间的组合可以是"并且"和"或者"的任意组合
不同的支付方式之间可以是"并且"和"或者"的任意组合
怎么写这些sql语句?

回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
1.以支付方式A购买过产品A或者以支付方式B购买过产品A
(select customerid
from order
where paymode = A
and product = A)
union
(select customerid
from order
where paymode = B
and product = A)
2.以支付方式A购买过产品A并且以支付方式B购买过产品A
(select customerid
from order
where paymode = A
and product = A)
intersect
(select customerid
from order
where paymode = B
and product = A)
3.没用支付方式A购买过产品A并且以支付方式B购买过产品A
(select customerid
from order
where paymode = B
and product = A)
minus
(select customerid
from order
where paymode = A
and product = A)
4.以支付方式A购买过产品A并且以支付方式A购买过产品B并且以支付方式B购买过产品A
...
5.(以支付方式A购买过产品A并且以支付方式A购买过产品B ) 或者以支付方式B购买过产品A
...
当然也可以用join来写上述sql语句,但使用集合操作逻辑上更清楚。
也许你应该复习一下集合和谓词逻辑的知识啦。


回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
1.以支付方式A购买过产品A或者以支付方式B购买过产品A
select distinct customerid from order where product = A and paymode in (A,B);
2.以支付方式A购买过产品A并且以支付方式B购买过产品A
select customerid from order where product = A and paymode in (A,B)
group by paymode having count(distinct paymode) = 2;
3.没用支付方式A购买过产品A并且以支付方式B购买过产品A
select customerid from (
select customerid,paymode from order where product = A
group by customerid,paymode having count(distinct paymode) = 1)
where paymode = B;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行