这样的SQL语句如何写(35分)

  • 主题发起人 主题发起人 cqttt
  • 开始时间 开始时间
C

cqttt

Unregistered / Unconfirmed
GUEST, unregistred user!
我有三张表A,B.C结构简述如:
a
号码 押金
B
号码 缴费金额
c
号码 消费金额
它们之间的关系是A-B(一对多),A-C(一对多);
现在我要所得的结果是A的押金+B的缴费金额-C的消费金额,根据号码分组.
所得结果集如:
号码 余额
我知道要用外联接,不知具体的代码如何写?
 
select a.号码,(b.缴费金额-c.消费金额) '余额'
from a
inner join b on a.号码=b.号码
inner join c on a.号码=c.号码
group by a.号码
 
谢谢yanliang,我试试.
 
select a.号码,A.押金+(sum(b.缴费金额)-sum(c.消费金额)) as '余额'
from a
inner join b on a.号码=b.号码
inner join c on a.号码=c.号码
group by a.号码,a.押金
 
楼上的答案是不对的,如果B表或C表没有数据,那不是连一条记录都找不到
我要求的是B表或C表有数据的时候,就做加减运算,
如果没有数据,则返回A表的押金字段。
这需要用到外联接。
 
SELECT a.号码,(a.押金 + isnull(bb.缴费金额,0)-isnull(cc.消费金额,0)) '余额'
FROM a,
(select sum(缴费金额) 缴费金额 from b) as bb,
(select sum(消费金额) 消费金额 from C) as cc
WHERE a.号码 = b.号码(+) and
a.号码 = c.号码(+)
ORDER BY a.号码
没上机试(Oracle),SQLServer同样

 
support createnew
 
SELECT a.号码,(a.押金 + isnull(bb.缴费金额,0)-isnull(cc.消费金额,0)) '余额'
FROM a,
(select 号码,sum(缴费金额) 缴费金额 from b group by 号码) as bb,
(select 号码,sum(消费金额) 消费金额 from C group by 号码) as cc
WHERE a.号码 = bb.号码 and
a.号码 = cc.号码
ORDER BY a.号码
 
多人接受答案了。
 
后退
顶部