日期:2014-05-16  浏览次数:20683 次

求语句,三个表求和相减!
表结构都含有id,name,amount,表a为入库记录,表b为借出记录,表c为出库记录
使用select id,name,sum(amount) group by id,name得到下面三个:
表a id,name,amount
        1    牙刷    30
       2     牙膏    40
      3      肥皂    50

表b id,name,amount
        1    牙刷    10
       2     牙膏    10

表c id,name,amount
        1    牙刷   10

希望得到:相减结果如下
表a id,name,amount
        1    牙刷   10
       2     牙膏  30
      3      肥皂    50
         

------解决方案--------------------
select  id,name,sum(amount) as amount from (
select id,name,amount from a 
union all 
select id,name,-amount from b 
union all
select id,name,-amount from c)T
group by   id,name

------解决方案--------------------

create table a(id int,name varchar(10),amount int)
insert a
select 1,'牙刷',30 union all
select 2,'牙膏',40 union all  
select 3,'肥皂',50
create table b(id int,name varchar(10),amount int)
insert b
select 1,'牙刷',10 union all
select 2,'牙膏',10 
create table c(id int,name varchar(10),amount int)
insert c
select 1,'牙刷',10 

select a.id,
a.name,
a.amount-isnull(b.amount,0)-isnull(c.amount,0)
from a
left join b
on a.name=b.name
left join c
on a.name=c.name

/*
1 牙刷 10
2 牙膏 30
3 肥皂 50
*/