最近设计库存数据表,入库、出库 有的说放在一起比较好;实时库存通过 月结库存表来 计算,
原本打算设计一个入库表(主从表)和一个出库表(主从表),有点犹豫,为了少走弯路,大家评
一下!
 谢谢了!

解决方案 »

  1.   

    ·双线主机 100M/35元/年,免费送数据库(自选MY/MSSQL) 
    ·详情请访问:http://www.515dns.com 
      

  2.   

    对于先进先出的情况,楼主可以参考:   
        
      /*   
      先进先出处理-2-1   
      2000下,用表变量的方法   
      */   
      /*   数据及结构   
        
      入库表数据   
      入库时间               数量                     单价                     商品ID                   
      ----------   -----------   -----------   -----------     
      2003.01.01   10                     10                     1   
      2003.01.05   20                     15                     1   
      2003.01.08   15                     20                     1   
      2003.01.05   20                     15                     2   
      2003.01.08   15                     20                     2   
        
      出库表数据   
      出库时间             数量                     商品ID                   
      ----------   -----------   -----------     
      2003.01.02   5                       1   
      2003.01.08   260                   1   
      2003.01.08   26                     2   
        
      要求查询结果   
      入库时间               数量           单价             商品ID   
      2003.1.1                 5                 10                       1             对应出库     5     
      2003.1.1                 5                 10                       1             对应出库     26     
      2003.1.5                 20               15                       1             对应出库     26     
      2003.1.8                 1                 20                       1             对应出库     26     
      */   
        
      --创建入库信息   
      declare   @tbin   table(时间   datetime,数量   int,单价   int,商品ID   int)   
      insert   into   @tbin   
      select   '2003.1.1',10,10,1   
      union   all   select   '2003.1.5',20,15,1   
      union   all   select   '2003.1.8',15,20,1   
      union   all   select   '2003.1.5',20,15,2   
      union   all   select   '2003.1.8',15,20,2   
        
      --创建出库信息   
      declare   @tbout   table(时间   datetime,数量   int,商品ID   int)   
      insert   into   @tbout   
      select   '2003.1.2',5,1   
      union   all   select   '2003.1.8',260,1   
      union   all   select   '2003.1.8',26,2   
        
      --创建更新表   
      declare   @up   table(inid   int,outid   int,入库时间   datetime,入库数量   int,单价   int,商品ID   int,出库数量   int)   
        
      --创建结果表   
      declare   @result   table(id   int   identity(1,1),入库时间   datetime,数量   int,单价   int,商品ID   int,对应出库   int)   
        
      --创建入库临时表   
      declare   @in   table(id   int   identity(1,1),时间   datetime,数量   int,单价   int,商品ID   int)   
      insert   into   @in(时间,数量,单价,商品ID)   
      select   时间,数量,单价,商品ID   
      from   @tbin   
      where   商品ID   in(select   商品ID   from   @tbout)   
      order   by   商品ID,时间   
        
      --创建出库临时表   
      declare   @out   table(id   int   identity(1,1),时间   datetime,数量   int,商品ID   int,数量1   int)   
      insert   into   @out(时间,数量,商品ID,数量1)   
      select   时间,数量,商品ID,数量   
      from   @tbout   order   by   商品ID,时间   
        
      while   exists   (select   1   from   @out)   
      begin   
      if   exists(select   1   from   @in)   
      begin   
      delete   from   @up   
        
      insert   into   @up   
      select   i.id,o.id,i.时间   
      ,case   when   i.数量<o.数量   then   i.数量   else   o.数量   end   
      ,i.单价,i.商品ID,o.数量1   
      from   
      (select   *   from   @in   a   where   id=(select   min(id)   from   @in   where   商品ID=a.商品ID))   i   
      ,(select   *   from   @out   a   where   id=(select   min(id)   from   @out   where   商品ID=a.商品ID))   o   
      where   i.商品ID=o.商品ID   
        
      insert   into   @result   
      select   入库时间,入库数量,单价,商品ID,出库数量   from   @up   
        
      update   @in   set   数量=数量-b.入库数量   
      from   @in   a,@up   b   where   a.id=b.inid   
      delete   from   @in   where   数量=0   
      or   商品ID   not   in(select   商品ID   from   @out)   
        
      update   @out   set   数量=数量-b.入库数量   
      from   @out   a,@up   b   where   a.id=b.outid   
      delete   from   @out   where   数量=0   
      end   
      else   
      begin   
      --下面这句是增加出库数量>入库数量的记录,如果不需要,就删除此句   
      insert   into   @result(入库时间,数量,商品ID,对应出库)   
      select   时间,-数量,商品ID,数量1   from   @out   
        
      --清除出库表,结束处理   
      delete   from   @out   
      end   
      end   
        
      select   convert(varchar(10),入库时间,102)   as   入库时间   
      ,数量,单价,商品ID,对应出库   
      from   @result   order   by   商品ID,入库时间   
      go   
      

  3.   


    加权平均参考   
      if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[td_purchase_s]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)   
      drop   table   [dbo].[td_purchase_s]   
      GO   
        
      CREATE   TABLE   [dbo].[td_purchase_s]   (   
      [pssheetno]   [char]   (15)   COLLATE   Chinese_PRC_BIN   NOT   NULL   ,--采购单号   
      [product]   [char]   (8)   COLLATE   Chinese_PRC_BIN   NOT   NULL   ,商品编号   
      [pus_specs]   [char]   (10)   COLLATE   Chinese_PRC_BIN   NOT   NULL   ,   
      [specs_per]   [decimal](4,   0)   NOT   NULL   ,   
      [unit]   [char]   (4)   COLLATE   Chinese_PRC_BIN   NOT   NULL   ,--单位   
      [price]   [decimal](8,   2)   NOT   NULL   ,   --进货价格   
      [pus_cost]   [decimal](10,   4)   NOT   NULL   ,   
      [fa_cost]   [decimal](10,   4)   NOT   NULL   ,--财务成本   
      [presents]   [char]   (8)   COLLATE   Chinese_PRC_BIN   NULL   ,   
      [pur_m]   [decimal](3,   0)   NULL   ,   
      [free_n]   [decimal](2,   0)   NULL   ,   
      [pus_amt]   [decimal](7,   2)   NULL   ,--进货数量   
      [pres_amt]   [decimal](7,   2)   NULL   ,   
      [fact_amt]   [decimal](7,   2)   NULL   ,   
      [total_amt]   [decimal](7,   2)   NULL   ,   
      [ff_amt]   [decimal](7,   2)   NULL   ,   
      [ff_sumamt]   [decimal](7,   2)   NULL   ,   
      [spec_dis]   [decimal](4,   2)   NULL   ,--特别折扣   
      [normal_dis]   [decimal](4,   2)   NULL   ,--正常折扣   
      [commission]   [decimal](7,   2)   NULL   ,商品回拥   
      [promo_sum]   [decimal](7,   2)   NULL   ,--特价优惠额   
      [promo_way]   [bit]   NOT   NULL   ,--优惠方式   
      [pur_tax]   [decimal](4,   2)   NULL   ,--进项税率   
      [sale_tax]   [decimal](4,   2)   NULL   ,--销项税率   
      [ven_price]   [decimal](8,   2)   NULL   ,   
      [back_cost]   [decimal](10,   4)   NULL   ,--退货成本   
      [saleprice]   [decimal](9,   2)   NULL   ,--销售价格   
      [shelf]   [char]   (8)   COLLATE   Chinese_PRC_BIN   NULL     
      )   ON   [PRIMARY]   
      GO   
        
        
      @arc   
      1-经销商品   
      2-代销商品   
      3-代理商品   
      4-物料商品   
        
        
      CREATE   procedure   tdsp_purcost   
      (@purprice   numeric   (8,2),@normaldis   numeric(4,2),@specdis   numeric(4,2),@commision   numeric(7,2),   
        @promosum   numeric(7,2),@promoway   bit,@arc   tinyint,@purcost   numeric(10,4)   output)   
          with   recompile,encryption   
      as   
      select   @purprice=isnull(@purprice,0)   
      select   @normaldis=isnull(@normaldis,0)   
      select   @specdis=isnull(@specdis,0)   
      select   @commision=isnull(@commision,0)   
      select   @promosum=isnull(@promosum,0)   
      select   @promoway=isnull(@promoway,1)   
      select   @arc=isnull(@arc,1)   
      if   @arc>4     
      begin   
            raiserror("错误算法标志",16,1)   
            return   
      end   
      select   @promoway=isnull(@promoway,1)   
      if   @promoway=0     
          begin   
              if   @arc=1   
      begin   
      select   @purcost=(@purprice*(1-@normaldis/100-@specdis/100)-@commision)-@promosum   
      end   
              if   @arc=2   
                      begin   
        select   @purcost=(@purprice*(1-@normaldis/100)*(1-@specdis/100)-@commision)-@promosum   
      end   
              if   @arc=3   
      begin   
                        select   @purcost=(@purprice-@commision)*(1-@normaldis/100-@specdis/100)-@promosum   
      end   
              if   @arc=4   
      begin   
                        select   @purcost=(@purprice-@commision)*(1-@normaldis/100)*(1-@specdis/100)-@promosum   
      end   
          return   
          end   
      else   
          begin   
              if   @arc=1   
      begin   
                        select   @purcost=(@purprice*(1-@normaldis/100-@specdis/100)-@commision)*(1-@promosum/100)   
      end   
              if   @arc=2   
      begin   
                        select   @purcost=(@purprice*(1-@normaldis/100)*(1-@specdis/100)-@commision)*(1-@promosum/100)   
      end   
              if   @arc=3   
      begin   
                        select   @purcost=(@purprice-@commision)*(1-@normaldis/100-@specdis/100)*(1-@promosum/100)   
      end   
              if   @arc=4   
      begin   
                        select   @purcost=(@purprice-@commision)*(1-@normaldis/100)*(1-@specdis/100)*(1-@promosum/100)   
      end   
          return   
      end   
        
      

  4.   

    http://topic.csdn.net/t/20021213/20/1259465.html
      

  5.   

    <a href='www.google.com'>免费库存管理</a>