网上看到一道sql查询题所做的总结

求表AAA中剩余的库存量。

Sql语句(1)

SELECT mc,SUM(s1)as 剩余数量 FROM  
   (
   SELECT 
       [mc],([s1]) as s1
      FROM AAA
      UNION all
    SELECT 
        [mc],(-[s1]) as s1
      FROM BBB) List 
   GROUP BY mc  

把两个表联合起来组成一个结果,把出库的数量转化为负的,然后再求和。

注意,此处必须用union all ,不能用union,union和union all 的区别是union会把联合起来的重复记录删除掉,所以不能用union,两个表的结构必须相同。

扩充:except 也是连接两个sql语句,就是获取AAA表中的在BBB表中没有的记录行,两个表的结构必须相同,except all是不消除重复的,但是在有的sql版本中不能用。

intersect恰好同except 相反,他是获取两个sql中AAA表中有,BBB表中也有的记录行,两个表的结构必须相同,intersect all是不消除重复的,但是在有的sql版本中不能用。

sql语句(2)

select mc ,s1-(select sum(s1) from bbb where mc=aaa.mc group by mc) from aaa
原文地址:https://www.cnblogs.com/heluo/p/2663594.html