這個問題應該不會很難吧.因為你要取得結果,當然用視圖較好.
每种物资的本月购入、本月支领數量和金額從你的入庫和出庫表中取得,月末结存、上月结存的数量從你的物料庫存表中取得(要記得每次出入庫時對庫存作修改)、单价是個問題,我的建議是用庫存表中的單價(因為你的入庫單價是不定的,當然取其平均值也可).
這里的sql語句是非常容易的.

解决方案 »

  1.   

    请先修改你的数据结构:
    物资品种库(pinzhong):字段为:bianma\mingcheng\guige\danwei(byanma为键值)
    物资现存库(xiancun):字段为:rukucode\bianma\zm_shuliang\danjia\rukuriqi\nian\yue(byanma为外键,可建立主键:rukucode)
    物资入库(ruku):字段为:rukucode\bianma\shuliang\danjia\rukuriqi\nian\yue(byanma为外键)支领物资库(zhiling):字段为:
    chukucode\bianma\shuliang\danjia\zhilingriqi\nian\yue(byanma为外键)
    在此结构基础上只要用左联就能完成你的工作

    select a.bianma,a.mingcheng,a.guige,A.danwei
    from pinzhong A
    left outer join
    (select bianma,本月购入数=sum(shuliang) from ruku where nian='2001' and yue='04' group bianma)B 
    on a.bianma=b.bianma
    ....
      

  2.   

    你的存储过程这样写
    CREATE PROCEDURE 存储过程名
       as   SET NOCOUNT ON
    select  a.bianma,a.mingcheng,a.guige,a.danwei,
    isnull(b.shuliang,0) as 本月购入数量,
             isnull(b.hejinger,0) as 本月购入和金额,
          isnull(c.shuliang,0) as 本月支领数量,
             isnull(c.hejinger,0) as 本月支领和金额,
          isnull(d.shuliang,0) as 月末结存数量,
             isnull(d.hejinger,0) as 月末结存和金额,
    isnull(d.shuliang,0)+isnull(c.shuliang,0)-isnull(b.shuliang,0) as 上月结存数量,
    isnull(d.hejinger,0)+isnull(c.hejinger,0)-isnull(b.hejinger,0) as 上月结存和金额
    from pinzhong a 
         left outer join 
         (select bianma, sum(shuliang) as shuliang, 
                 sum(shuliang*danjia) as hejinger 
         from ruku 
         where nian = year(getdate())  and yue = Month(getdate())
         group by) b on a.bianma = b.bianma
         left outer join  
         (select bianma, sum(shuliang) as shuliang, 
                 sum(shuliang*danjia) as hejinger 
         from zhiling 
         where nian = year(getdate())  and yue = Month(getdate())
         group by) c on a.bianma = c.bianma
         left outer join  
         (select bianma, sum(shuliang) as shuliang, 
                 sum(shuliang*danjia) as hejinger 
         from xiancun 
         where nian = year(getdate())  and yue = Month(getdate())
         group by) d on a.bianma = d.bianmareturn
      

  3.   

    增加一个表用来保存月报表的数据,你要取得上月的结存数据就必须要有表来保存月报表数据.我认为这已经不属于多表联接问题了,应该是数据设计的问题.有事联系OICQ:21998699
      

  4.   

    采用什么办法核算:移动加权平均,先进先出、后进先出,??
    首先要库结构合理,否则后很麻烦的,
    使用sqlserver的视图,很容易的,我理解你是算法上有障碍
      

  5.   

    算法问题,绝对可以解决,慢慢想,don't warry