请问下表1数量之和减表2数量之和的sql话句怎么写?

通过查找相同的id把每个表相同id对应数量相加 得出结果再用表1之和减掉表2之和。
比如表1中所有id为101的数量之和为1000.表2所有id为101的数量之和为700。然后拿1000-700就是我要的结果
注意:表1 id中可能会存在102 而表2中可能不会存在102 如果表1 id中有102 而表2id中没102 那表1 id 102 数量就不变显示出来。
已知以下代码
select t1.id, sum(isnull(t1.数量,0))-sum(isnull(t2.数量,0)) as 差值
from 表1 t1
left join 表2 on t1.id=t2.id
group by t1.id
但这个运行后的结果不是300
而是
表1 第一个101减表2第一个101 加上
表1 第一个101减表2第二个101 加上
表1 第二个101减表2第一个101 加上
表1 第二个101减表2第二个101
最张得出结果600
请问这个sql语句应该怎么改才能得到结果等于300
(表1所有101相加之和)-(表2所有101相加之和)

1.先求各,再求差
select a.id, isnull(a.数量,0)-isnull(b.数量,0) as 差值
from
(
select t1.id, sum(isnull(t1.数量,0)) as 数量
from 表1 t1
group by t1.id
)a
left join
(
select t2.id, sum(isnull(t2.数量,0)) as 数量
from 表2 t2
group by t2.id
)b on a.id=b.id
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-11
select t1.id, t1数量-t2数量 as 差值
from
(select id,sum(数量) as t1数量 from 表1 group by id) t1
left join
(select id,sum(数量) as t2数量 from 表2 group by id) t2
on t1.id=t2.id
where t2数量 is not null
第2个回答  2010-08-11
先按照id进行分组,统计出表1和表2中每个id的和,然后左连接相减就行了。

select TableA.[id],num1-num2
from
(select [id],sum(isnull(数量,0)) as num1 from 表1 group by [id])
as TableA
left join
(
select [id],sum(isnull(数量,0)) as num2 from 表2 group by [id]
) as TableB
on
TableA.[id]=TableB.[id]
相似回答