先把入库表和出库表分别变成:
品名代号,收入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 品名代号
品名代号,收入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 品名代号
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
+' = 收入数, 库存'+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.品名代号')愉快的登山者 ⊙
◢◣◢◣◢◣
奇怪了,我在查询分析器中试了你的语句,提示有服务器: 消息 156,级别 15,状态 1,行 2
在关键字 'right' 附近有语法错误。我觉得好像都符合语法标准啊