总共3张相关表,商品资料表 AS a,入库表 as b,出库表 as c,查询某一个时间点上的入库出库数量,以及库存数量。
最后查询出来应得到:商品ID,名称,出库数量,入库数量,库存 GROUP by 商品Id。高手指教......

解决方案 »

  1.   

    select x.商品Id,a.名称,sum(case when mytype=1 then x.数量 else 0 end) as 出库数量,sum(case when mytype=0 then x.数量 else 0 end) as 入库数量,sum(case when mytype=0 then x.数量 else -1*x.数量 end) as 库存
    (
    (select 0 as mytype,商品Id,数量  from  入库表  where 某一个时间点 ) b
    union
    (select 1 as mytype,商品Id,数量  from  出库表   where 某一个时间点) c
    ) x 
    inner join 商品资料表 a on a.商品Id=x.商品Id
    grouo by x.商品Id
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  2.   

    强烈建议楼主另外建立一个库存表。
    包含大致的字段有ID,商品ID,库存数量,最近入库时间,最近出库时间。
    每次入库时,更新库存数量+=入库数量,同时更新最近入库时间字段。
    每次出库时,更新库存数量-=入库数量,同时更新最近出库时间字段。
      

  3.   

    先帮忙按照表的结构写一个吧?我实在是想不出,这个SQL语句应该怎么写
      

  4.   

    select x.商品Id,a.名称,sum(case when mytype=1 then x.数量 else 0 end) as 出库数量,sum(case when mytype=0 then x.数量 else 0 end) as 入库数量,sum(case when mytype=0 then x.数量 else -1*x.数量 end) as 库存 
    from --加此字段。

     (select 0 as mytype,商品Id,数量  from  入库表  where 某一个时间点 ) b 
      union all --加上一个all字段,防止有重复的记录漏掉
     (select 1 as mytype,商品Id,数量  from  出库表  where 某一个时间点) c 
    ) x 
    inner join 商品资料表 a on a.商品Id=x.商品Id 
    grouo by x.商品Id 
      

  5.   

    代码参考2楼的,2楼思路已经写的很详细了,不过建议在union 关键字后面加上all,防止相同商品相同数量的信息漏掉。
      

  6.   

    不行呀!!上面入库,出库是和在一张表里的,而我的表是分开的呀?这样就不能用UNION了,哪位帮帮忙,按照我给的表的结构写一下呀?
      

  7.   

    我晕死,明明是入库和出库2张分开的表通过union集合起来,就是按照你要求写的,你都不看下,懒的要死。
      

  8.   

    上面的大哥!我的意思是我的入库表里面数量字段是IMQTY,出库表里面数量是EXQTY,字段名称不同,UNION用起来数据是不对的!何况我也没有mytype这个字段呀
      

  9.   

    名字不同你就用别名嘛,IMQTY as 数量,EXQTY as数量。
      

  10.   

    但是没有mytype这个字段呀,怎么辨别是入库数量还是出库数量
      

  11.   

    mytype是自定义的,不需要你有这个字段。你没看到0 as mytype吗。
      

  12.   

    感谢楼上的提点,已经查询出来了,但有一事,还需请教一下。select x.商品Id,a.名称,sum(case when mytype=1 then x.数量 else 0 end) as 出库数量,sum(case when mytype=0 then x.数量 else 0 end) as 入库数量,sum(case when mytype=0 then x.数量 else -1*x.数量 end) as 库存 
    from --加此字段。 

    (select 0 as mytype,商品Id,数量  from  入库表  where 某一个时间点 ) b **
      union all --加上一个all字段,防止有重复的记录漏掉 
    (select 1 as mytype,商品Id,数量  from  出库表  where 某一个时间点) c **
    ) x 
    inner join 商品资料表 a on a.商品Id=x.商品Id 
    grouo by x.商品Id ***
    带**号的行中,必须要吧b,c去掉才可以正常查询,否则会报UNION附近存在语法错误。是怎么回事?