先把入库表和出库表分别变成:
品名代号,收入01...收入12(对应一年12个月)

品名代号,库存01...库存12,年份
再做一下FULL JOIN就可以了.
得到这个
品名代号,收入01...收入12(对应一年12个月)
参考:
select 品名代号
  ,sum (case when month(日期)=1 then 合计金额 else 0 end) 收入01
  ,sum (case when month(日期)=2 then 合计金额 else 0 end) 收入02
  ....
from 入库表 group by  品名代号

解决方案 »

  1.   

    用存储过程或用在语句中用固定表插入也可
    Create Table #Tmp(
        品名代号          nVarchar(20)    Not Null Default '',
        收入01            Money           Not Null Default 0,
        收入...
        收入12            Money           Not Null Default 0
    )
    Insert Into #Tmp(Select 品名代号,
         Case When Month(日期)=1 Then Sum(IsNull(合计金额,0)) Else 0 End,
         ...
         Case When Month(日期)=12 Then Sum(IsNull(合计金额,0)) Else 0 End,
          From 入库明细)
    Insert Into #Tmp(Select 品名代号,
         Case When Month(日期)=1 Then Sum(IsNull(合计金额,0)) Else 0 End,
         ...
         Case When Month(日期)=12 Then Sum(IsNull(合计金额,0)) Else 0 End,
          From 一进一出)
    '插入收入
    Insert Into 库存表(品名代号,收入01...收入12)
    SElect 品名代号,Sum(收入01),..Sum(收入12) From #Tmp Group By Month,品名代号
    '更新库存表
    Update 库存表 Set 库存01=库存01+收入01,
                   ...库存12=库存12+收入01+...收入12
      

  2.   

    exec ('update 库存表 set 收入'+right(convert(char(6), getdate(), 112),2)
    +' = 收入数, 库存'+right(convert(char(6), getdate(), 112),2)
    +' = 库存'+right(convert(char(6), dateadd(mm, -1, getdate()), 112),2)+' + 收入数 
    from (select IsNull(sum(b.合计金额), 0)  收入数, a.品名代号 from 物资 a
    Left Join (Select 日期,品名代号,合计金额 from 入库明细 Where month(日期) =  month(GetDate()) 
    Union all Select 日期,品名代号,合计金额 from 一进一出 Where month(日期) =  month(GetDate())) b On A.品名代号 = b.品名代号
    group by a.品名代号
    ) C
    where 库存表.品名代号 = C.品名代号')愉快的登山者       ⊙
    ◢◣◢◣◢◣
      

  3.   

    to: tj_dns(愉快的登山者) 
      奇怪了,我在查询分析器中试了你的语句,提示有服务器: 消息 156,级别 15,状态 1,行 2
    在关键字 'right' 附近有语法错误。我觉得好像都符合语法标准啊