+ -
当前位置:首页 → 问答吧 → 求问题解决方案与代码!

求问题解决方案与代码!

时间:2011-11-20

来源:互联网

背景:
  现有3张表:
  InSto090210cyr(进仓表) 
  InStoDate char(10), 日期为自动获取系统时间
  InStoNo varchar(20) PRIMARY KEY, 进仓编号:‘时间’+‘当前表条目数+1’
  MatNo char(6), 物料代码
  MatName char(20), 物料名称
  InStoTotal int CHECK(InStoTotal>=0), 进仓数量
  StaNo char(6), 经办人代码
  StaName char(8), 经办人名
  InStoNotes text 备注
  
  OutSto090210cyr(出仓表)
  OutStoDate char(10), 日期为自动获取系统时间
  OutStoNo varchar(20) PRIMARY KEY, 进仓编号:‘时间’+‘当前表条目数+1’
  MatNo char(6), 物料代码
  MatName char(20), 物料名称
  OutStoTotal int CHECK(OutStoTotal>=0), 出仓数量
  StaNo char(6), 经办人代码
  StaName char(8), 经办人名
  OutStoNotes text 备注
  
  Materials090210(物料表)
  MatNo char(6) PRIMARY KEY,
  MatName char(20),
  MatClass char(8),
  MatType char(4),
  MatUnit char(2),
  MatTotal int,
  MatHigh int,
  MatLow int 
我想得到一个存储过程:
传入 @time1 @time2 @MatNo
得到下面的结果:
MatNo MatName MatClass MatType MatUnit MatTotal 进仓总数 出库总数 总流动量大小

个人思路:
  1.创建一个临时表#temple
  2.然后把Materials090210里需要的列select into 
  3.再通过存储过程
--**********统计指定时间段的物料总数(进仓单)
create procedure ProStadisInToTal090210cyr
(
  @time1 char(10),
  @time2 char(10)
)
as
 select MatNo,sum(InStoTotal)进仓总数
 from InSto090210cyr 
 where datediff(day,InStoDate,@time1)<=0 and datediff (day,InStoDate,@time2)>=0
group by MatNo
GO
得到(MatNo 进仓总数)插到#temple
  4.--**********统计指定时间段的物料总数(出仓单)
create procedure ProStadisOutToTal090210cyr
(
  @time1 char(10),
  @time2 char(10)
)
as
 select MatNo,sum(OutStoTotal)出仓总数
 from OutSto090210cyr 
 where datediff(day,OutStoDate,@time1)<=0 and datediff (day,OutStoDate,@time2)>=0
group by MatNo
GO
 得到(MatNo 出仓总数)插到#temple
 5.最后用存储过程
create procedure ProStadisToTal090210cyr01 @time1 char(10),@time2 char(10)
as
begin
select MatNo , sum(总数) 总数 from 
(
  select MatNo,sum(InStoTotal)总数  
  from InSto090210cyr  
  where datediff(day,InStoDate,@time1)<=0 and datediff (day,InStoDate,@time2)>=0
  group by MatNo
  union all 
  select MatNo,sum(OutStoTotal)总数 from OutSto090210cyr  
  where datediff(day,OutStoDate,@time1)<=0 and datediff (day,OutStoDate,@time2)>=0
  group by MatNo
)t
group by MatNo order by 总数
end 
得到(MatNo 总数) 插入#temple
  6.最后把得到集合,通过select * from #temple where MatNo=@MatNo 得到的集合 返回给delphi ADOQuery! 
  写了半天就是写不出来,求大侠指点啊!
  有其他方法也行啊,毕竟我菜鸟一个啊!
  在线等啊!

 

作者: chinacyr   发布时间: 2011-11-20

SQL code
create procedure ProStadisInToTal090210cyr
(
  @time1 char(10),
  @time2 char(10),
  @MatNo char(10)
)
as
begin
select MatNo,MatName,MatClass,MatType,MatUnit,MatTotal,
(select sum(InStoTotal) from InSto090210cyr where InStoDate between @time1 and @time2 and MatNo=@MatNo)as 进仓数量,
(select sum(OutStoTotal) from OutSto090210cyr where OutStoDate between @time1 and @time2 and MatNo=@MatNo)as 出仓数量
from Materials090210 where MatNo=@MatNo
end

作者: qianjin036a   发布时间: 2011-11-20