有两个表假如如下:
AA表 字段
编号  名称   入库数  
001   电脑    1
002   电视    1
001   电脑    -1   就是入库单表中可能有退货
003   手机    1BB表  字段
编号  名称    出库数
002   电视     1
003   手机     1
003   手机     -1能否用SQL语句达到如下结果(就是求出库存,没库存的不显示),以编号为准,BB表中的所有商品编号AA表中都是,本来这条语句就行了 
SELECT * FROM AA WHERE AA.编号 = (SELECT * FROM BB) 
但是AA表如BB表中有退货,就不能这么做了,高手该如何?达到的结果
编号   名称   库存数
003    手机    1

解决方案 »

  1.   

    select 编号,名称,sum(库存数) from 
    ((select 编号,名称,sum(入库数) as 库存数 from  aa group by 编号,名称) 
    union 
    (select 编号,名称,(0-sum(出库数)) as 库存数 from bb group by 编号,名称))
     group by 编号,名称
      

  2.   


    select 编号,名称,sum(库存数) as num from 
    ((select 编号,名称,sum(入库数) as 库存数 from  aa group by 编号,名称) 
    union 
    (select 编号,名称,(0-sum(出库数)) as 库存数 from bb group by 编号,名称))
    where num>0
     group by 编号,名称
      

  3.   

    没有环境测试,你试试这个:
    select 编号,名称,sum(库存数) as num from 
    ((select 编号,名称,sum(入库数) as 库存数 from  aa group by 编号,名称) 
    union 
    (select 编号,名称,(sum(0-出库数)) as 库存数 from bb group by 编号,名称))
    where num>0
     group by 编号,名称
      

  4.   

    select 编号,名称,SUM(入库数) ,SUM(出库数)FROM  BB LEFT JOIN AA ONBB。编号=AA。编号 WHERE   (NOT( SUM(入库数)<0) OR (NOT ( SUM(出库数)<0))
      

  5.   

    select 编号,名称,SUM(入库数) ,SUM(出库数)FROM  BB LEFT JOIN AA ONBB。编号=AA。编号 WHERE   (NOT( SUM(入库数)<0) OR (NOT ( SUM(出库数)<0))
    group by 编号 ,名称
      

  6.   

    上面的语句都执行不了,能否再帮忙试试。    WHERE子句中不能出现聚合函数。
      

  7.   

    select AA.编号,A.名称,sum(AA.入库数)-SUM(BB.出库数) as 库存数 from from  aa ,BB
    where (sum(AA.入库数)-SUM(BB.出库数)) >0  group by AA.编号
      

  8.   

    我试了一下可以用如下语句实现各自的功能,但是如何把第二条语句中查询出来的名称从第一条语句中删除。
    第一条 SELECT 编号,名称 FROM AA GROUP BY 编号,名称 HAVING SUM(入库数)>0第二条 SELECT 编号,名称 FROM BB GROUP BY 编号,名称 HAVING SUM(出库数)>0因为入库数和出库数不是1就是-1,所以库存可以不用管
    第一条语句查询的结果是
    编号 名称
    002 电视
    003 手机第二条语句查询的结果是
    002 电视要达到的结果就是如果用一条语句把上面两条语句联起来,把第二条查询的结果从第一条删除,即达到如下结果编号  名称
    003   手机