麻烦大家看看这个问题吧,谢谢

Sundery 2005-01-12 08:14:49
http://community.csdn.net/Expert/topic/3677/3677579.xml?temp=.560116


一共2百分了,全给能够解决问题的人

或者这类的问题有什么比较好的解决方法?

问题描述:公司需要统计每个月的当前库存报表
操作时间 作业号 地点 物品1 物品2 物品2 物品4 物品5
======================================================================
2004-08-31 0 月初量 19820 90000 16000 10000 50000
2004-09-02 843 天山路 5 0 32 10 8
2004-09-02 836 海口 0 2 0 0 0
2004-09-01 833 东方路 185 0 185 0 2
2004-09-30 0 剩余量 19000 89998 15783 9990 49990

物品的数量不确定,比如我希望默认得到当前月份的该报表,或者我输入2003,4的时候,就告诉我4月份的具体情况
应该包括4月初的库存量,4月份的所有操作和4月底的库存情况

我目前的实现想法是
1. SQL中实现,然后通过Access中的adp实现
优点:数据库做好以后,前台部分工作比较少
缺点:灵活性少,可能需要大部分ado和jet的操作

2. SQL中实现,然后通过asp.net来实现
优点:可操作的范围大,
缺点:前台工作多,而且asp.net不太会
...全文
95 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2005-01-13
  • 打赏
  • 举报
回复
CREATE TABLE Eh
(
/*ID*/ EhID INT IDENTITY(1,1) PRIMARY KEY,
/*操作日期*/ OperateDate DATETIME NOT NULL,
/*作业单编号*/ JobID_FK INT,
/*目的地*/ Destination NVARCHAR(30) NOT NULL,
/*货物*/ CargoName NVARCHAR(30) NOT NULL,
/*货物数量*/ CargoNumber INT
)
INSERT Eh VALUES (CAST('2004-9-1' AS DATETIME),833,N'东方路',N'胶管VA-P12',185)
INSERT Eh VALUES (CAST('2004-9-1' AS DATETIME),833,N'东方路',N'螺杆M12*160',185)
INSERT Eh VALUES (CAST('2004-9-1' AS DATETIME),833,N'东方路',N'内六角M10*25',10)
INSERT Eh VALUES (CAST('2004-9-2' AS DATETIME),836,N'海口',N'进口胶枪VM-P345',2)
INSERT Eh VALUES (CAST('2004-9-2' AS DATETIME),843,N'天山路',N'螺杆M12*160',16)
INSERT Eh VALUES (CAST('2004-9-2' AS DATETIME),843,N'天山路',N'螺杆M20*240',8)
INSERT Eh VALUES (CAST('2004-9-2' AS DATETIME),843,N'天山路',N'螺杆M16*190',10)
INSERT Eh VALUES (CAST('2004-9-2' AS DATETIME),843,N'天山路',N'螺杆M12*160',16)
INSERT Eh VALUES (CAST('2004-10-1' AS DATETIME),833,N'东方路',N'内六角M10*25',10)
INSERT Eh VALUES (CAST('2004-10-2' AS DATETIME),836,N'海口',N'进口胶枪VM-P345',2)
INSERT Eh VALUES (CAST('2004-10-2' AS DATETIME),843,N'天山路',N'螺杆M12*160',16)

create table test2 (
year int, /*年*/
month int, /*月*/
CargoName nvarchar(50), /*货物名称*/
total int /*该年月的库存*/
)
insert test2 values (2004,9,N'进口胶枪VM-P345',18000)
insert test2 values (2004,9,N'胶管VA-P12',2560)
insert test2 values (2004,10,N'进口胶枪VM-P345',16000)
insert test2 values (2004,10,N'胶管VA-P12',2000)
go

--处理的存储过程
create proc p_process
@dt datetime=null,--要统计数据的截止日期,为null则取当前日期
@bz bit=0 --如果为1,则把今天的库存数量写入月初数表test2
--用标识来处理是为了处理的控制上方便,而不是限死了只有最后一天才处理
as
set nocount on
--规范参数
if @dt is null
set @dt=convert(char(10),getdate(),120)
else
set @dt=convert(char(10),@dt,120)

declare @dt1 datetime,@dt2 datetime,@dt3 char(10)
select @dt1=convert(char(7),@dt,120)+'-01',@dt2=@dt+1
,@dt3=convert(char(10),@dt1-1,120)
select OperateDate=convert(char(10),OperateDate,120),JobID_FK,Destination
,CargoName,CargoNumber=sum(CargoNumber),bz=-1
into #t from Eh
where OperateDate>=@dt1 and OperateDate<@dt2
group by convert(char(10),OperateDate,120),JobID_FK,Destination
,CargoName
union all
select a.*,isnull(b.CargoName,''),isnull(b.total,0),bz=1
from(select OperateDate=@dt3,JobID_FK=0,Destination='月初量')a
left join( --无初始化数据时,也要显示月初那行
select CargoName,total
from test2
where [year]=year(@dt3) and [month]=month(@dt3)
)b on 1=1

declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000)
select @s1='',@s2=''''+convert(char(10),@dt,120)+''',0,''剩余数量'''
,@s3=case when @bz=0 then '' else '
set xact_abort on
begin tran
insert test2([year],[month],[CargoName],[total])
select '''+datename(year,@dt)+''','''+datename(month,@dt)
+''',CargoName,sum(CargoNumber*bz)
from #t
group by CargoName
commit tran' end
select @s1=@s1+',['+rtrim(CargoName)+']=sum(case CargoName when '''+rtrim(CargoName)+''' then CargoNumber else 0 end)'
,@s2=@s2+',['+rtrim(CargoName)+']=sum(case CargoName when '''+rtrim(CargoName)+''' then CargoNumber*bz else 0 end)'
from #t where CargoName>'' group by CargoName
exec('
select * from(
select top 100 percent
OperateDate,JobID_FK,Destination'+@s1+'
from #t
group by OperateDate,JobID_FK,Destination
order by OperateDate,JobID_FK)a
union all
select '+@s2+'
from #t
'+@s3+'
')
go

--调用
exec p_process '2004-9-11'
exec p_process '2004-10-11'
exec p_process '2004-11-30',1
select * from test2
go

--删除测试
drop proc p_process
drop table test2,Eh

/*--测试结果(自己看)--*/

Sundery 2005-01-13
  • 打赏
  • 举报
回复
太强了,我没什么话说了!接分吧,谢谢谢谢!!!
NinGoo 2005-01-12
  • 打赏
  • 举报
回复
每月的月初量都是存在上月的最后一天么?


select * from table1
where year(操作时间)=year(getdate()) and month(操作时间)=month(getdate()) and 地点<>'月初量'
or (year(操作时间)=year(getdate()) and month(操作时间)=month(getdate())-1 and 地点='月初量')
daijingjie2002 2005-01-12
  • 打赏
  • 举报
回复
问题是你的月初数量从哪里来

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧