2 qq 24835349 qq_24835349 于 2016.03.28 08:28 提问

条件复杂的sql语句查询
sql

有三张表 分别为 会员表(member) 销售表(sale) 退货表(regoods)
会员表有字段 memberid (会员id,主键) credits(积分);
销售表有字段 memberid(会员id ,外键) 购买金额(MNAccount);
退货表中有字段memberid(会员id ,外键) 退货金额(RMNAccount);
业务说明 : 1、销售表中的销售记录可以是会员购买,也可是非会员购买。(即销售表中的memberid可以为空)
2、销售表中的一个会员可以有多条购买记录
3、退货表中的退货记录可以是会员,也可是非会员
4、一个会员可以有一条或多条退货记录
查询需求 : 分组查出销售表中所有会员购买金额,同时分组查出退货表中所有会员的退货金额,把会员id相同的购买金额-退款金额得到的结果更新到表会员表中对应会员的积分字段(credits)

3个回答

qq_25275583
qq_25275583   2016.03.28 10:48

select s.memberid, s.y1, s1.y2, (s.y1 - s1.y2)
from (select y.memberid, sum(y.MNAccount) y1
from member d
left join sale y
on d.memberid = y.memberid
group by y.memberid) s
left join (select y.memberid, sum(y.RMNAccount) y2
from member d
left join regoods y
on d.memberid = y.memberid
group by y.memberid) s1
on s.memberid = s1.memberid

    这个可以一次查出你需要的所有数据,至于插值。这个SQL 查询只查ID 和金额差。 写个存储插进去就好。
qq_25275583
qq_25275583 回复qq_24835349: 晚一点! 上班中囧!
一年多之前 回复
qq_24835349
qq_24835349 金额差,我也查出来了,就是更新到会员表有点问题,存储不太懂,还望明叙
一年多之前 回复
zengna
zengna   2016.03.28 09:45

我个人觉得用一个sql语句好像有些困难,建议写存储过程来实现,好久不用,也记不大太多
下面是分组查出销售表中所有会员购买金额的sql语句:
select sum(sale.MNAccount) from sale, member where sale.member_id=member.id group by member.id;

希望能对你有帮助!

CSDNXIAOD
CSDNXIAOD   2016.03.30 11:28

oracle sql语句复杂查询
sql 语句实现简单查询和复杂查询
解析Oracle中sql语句的复杂查询
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!