请问仓库的日记帐怎么处理是单独的设计一个表呢?还是查询中获得。98分相谢!

Angelnet 2003-11-17 05:23:44
如果在查询中获得,哪时间长之后,不是要花费很长的时间。
下面是我要的结果。还有可能是查询某个区间的(2003-10-15 To 2003-11-10)

物料编码 物料名称 物料规格 颜色 进仓日期 进仓数量 出仓数量 单位 当前库存
001 书纸 20*30 红 2003-10-11 50 20 张 30
001 书纸 20*30 红 2003-10-11 80 0 张 110
002 皮纸 20*30 红 2003-10-11 80 0 张 110
...全文
170 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-11-19
  • 打赏
  • 举报
回复
--删除测试环境
drop table 物料明细表,进仓主表,进仓明细表,出仓主表,出仓明细表
drop view qry进仓单,qry出仓单,qry进出记录
zjcxc 元老 2003-11-19
  • 打赏
  • 举报
回复
--实现楼主的要求:

--进出记录表
select a.*
,进仓日期=convert(varchar(10),b.进仓日期,120),b.进仓数量
,出仓日期=convert(varchar(10),b.出仓日期,120),b.出仓数量
,当前库存=isnull((select sum(进仓数量) from qry进仓单 where 物料ID=a.物料ID and 进仓日期<=b.日期),0)
-isnull((select sum(出仓数量) from qry出仓单 where 物料ID=a.物料ID and 出仓日期<=b.日期),0)
from 物料明细表 a left join qry进出记录 b on a.物料ID=b.物料ID
order by a.物料ID,b.日期

--当前库存表
select a.*,b.当前库存
from 物料明细表 a left join (
select 物料ID,当前库存=isnull(sum(进仓数量),0)-isnull(sum(出仓数量),0) from qry进出记录 group by 物料ID
)b on a.物料ID=b.物料ID
order by a.物料ID

zjcxc 元老 2003-11-19
  • 打赏
  • 举报
回复
--为数据处理添加视图
create view qry进仓单
as
select b.物料ID,a.进仓日期,进仓数量=sum(b.数量)
from 进仓主表 a join 进仓明细表 b on a.进仓ID=b.进仓ID
group by b.物料ID,a.进仓日期

go
create view qry出仓单
as
select b.物料ID,出仓日期=a.领料日期,出仓数量=sum(b.数量)
from 出仓主表 a join 出仓明细表 b on a.出仓ID=b.出仓ID
group by b.物料ID,a.领料日期

go
create view qry进出记录
as
select 物料ID=isnull(a.物料ID,b.物料ID)
,a.进仓日期,进仓数量=sum(a.进仓数量)
,b.出仓日期,出仓数量=sum(b.出仓数量)
,日期=isnull(a.进仓日期,b.出仓日期)
from qry进仓单 a full join qry出仓单 b
on a.物料ID=b.物料ID and a.进仓日期=b.出仓日期
group by isnull(a.物料ID,b.物料ID),a.进仓日期,b.出仓日期,isnull(a.进仓日期,b.出仓日期)

zjcxc 元老 2003-11-19
  • 打赏
  • 举报
回复
--按照楼主发的Email.

--数据测试环境
create table 物料明细表(物料ID varchar(6),名称 varchar(10),规格 varchar(10),颜色 varchar(10),单位 varchar(10),所属类别 varchar(10))
insert into 物料明细表
select 'A-001','皮纸','20×30×50','红','张','纸'
union all select 'B-002','磁铁','20×10×50','','块','五金'

create table 进仓主表 (进仓ID varchar(20),供应商ID varchar(10),进仓日期 datetime,原凭证号 varchar(10),入库类型 int)
insert into 进仓主表
select 'J-20031015-001','SA001','2003-10-15','123456',1
union all select 'J-20031015-002','SA002','2003-10-15','123457',1
union all select 'J-20031017-001','SA002','2003-10-17','123456',2

create table 进仓明细表 (进仓ID varchar(20),物料ID varchar(6),数量 decimal(20,2))
insert into 进仓明细表
select 'J-20031015-001','A-001',200
union all select 'J-20031015-002','B-002',99
union all select 'J-20031017-001','A-001',150.5

create table 出仓主表 (出仓ID varchar(20),部门ID varchar(10),领料日期 datetime,领料单号 varchar(10),出库类型 varchar(1))
insert into 出仓主表
select 'C-20031015-001','Dept_P','2003-10-15','1111111','P'
union all select 'C-20031016-001','Dept_P','2003-10-16','1111112','P'

create table 出仓明细表 (出仓ID varchar(20),物料ID varchar(6),数量 decimal(20,2))
insert into 出仓明细表
select 'C-20031015-001','A-001',50
union all select 'C-20031016-001','A-001',50
Angelnet 2003-11-19
  • 打赏
  • 举报
回复
各位帮我一把
Angelnet 2003-11-19
  • 打赏
  • 举报
回复
zjcxc(邹建) ( ) 照你写的,当前库存不正确,你哪样只是当天的相减。谢谢你!
Angelnet 2003-11-19
  • 打赏
  • 举报
回复
请楼上能否说详细一点,能否帮忙设计这个数据库,非常感谢!
zjcxc 元老 2003-11-18
  • 打赏
  • 举报
回复
--一般进销存的做法
增加一个库存表,每个月结账,结账的时候,将当前库存情况写入库存表.
每个月的进出仓情况通过进/出/库存三个表来查询.

这样,即提高了效率,又解决了当月单据修改时,要频繁修改库存表,容易产生库存表错误的问题]
zjcxc 元老 2003-11-18
  • 打赏
  • 举报
回复
--创建视图,库存表
create view 库存表
as
select a.物料编码,a.物料,a.规格,a.颜色
,b.进仓日期,进仓数量=sum(b.进仓数量)
,c.出仓日期,出仓数量=sum(c.出仓数量)
,a.单位
,当前库存=sum(isnull(b.进仓数量,0)-isnull(c.出仓数量,0))
from 物料名称
left join 进仓表 b on a.物料编码=b.物料编码
left join 出仓表 c on a.物料编码=c.物料编码
group by a.物料编码,a.物料,a.规格,a.颜色
,b.进仓日期,c.出仓日期,a.单位
zjcxc 元老 2003-11-18
  • 打赏
  • 举报
回复
zjcxc@21cn.com
Angelnet 2003-11-18
  • 打赏
  • 举报
回复
哪位高手能否留下E_Mail.我给他详细资料,帮帮忙。要不我死定了。下个月五号搬新厂去,珲不完工,我麻烦了。
Angelnet 2003-11-18
  • 打赏
  • 举报
回复
开始没说清楚,我有两个表,一个进仓表,一个出仓表,一个物料名称表,通过这个三表来得到物料每天的进出仓情况,并计算出库存,按编码和日期分组求和得到下表:
物料编码 物料 规格 颜色 进仓日期 进仓数量 出仓日期 出仓数量 单位 当前库存
001 书纸 20*30 红 2003-10-11 50 2003-10-11 20 张 30
001 书纸 20*30 红 2003-10-11 80 张 110
002 皮纸 20*30 蓝 2003-10-11 80 张 80
002 皮纸 20*30 蓝 2003-10-11 40 张 40
但是如果每次都通过查询得到结果,速度肯定很慢。谢谢!
Benimarunikado 2003-11-18
  • 打赏
  • 举报
回复
如果你还很疑惑,可以把你说的几个表(包括字段)给出来;再有把你想要实现的结果给出来;相信一定可以解决的!
Benimarunikado 2003-11-18
  • 打赏
  • 举报
回复
邹建 真是个强人!佩服!

Q:仓库的日记帐怎么处理是单独的设计一个表呢?还是查询中获得?

A:具体的数据库实现,邹建已经写得很不错了;我就说说大概吧。
一般,在数据库中为仓库的日记帐单独建立一个表,但是不必要
包含诸如“物料编码 物料 规格 颜色 进仓日期 进仓数量 出仓日期 出仓数量 单位
当前库存”等所有字段(这也不符合RDBMS范式),包含必要字段即可;
使用该表时,如果需要查询结果,则写出相应的复合查询语句即可;如果需要
打印单据也是一样的!
zjcxc 元老 2003-11-18
  • 打赏
  • 举报
回复
那也一样啊.


create view 库存表
as
select a.物料编码,a.物料,a.规格,a.颜色
,b.进仓日期,进仓数量=sum(b.进仓数量)
,c.出仓日期,出仓数量=sum(c.出仓数量)
,a.单位
,当前库存=sum(isnull(b.进仓数量,0)-isnull(c.出仓数量,0))
from 物料名称
left join (

select a.进仓日期,a.物料编码,进仓数量=sum(b.进仓数量) from 进仓表 a join 进仓明细表 b on a.单据编号=b.单据编号

) b on a.物料编码=b.物料编码
left join (

select a.出仓日期,a.物料编码,出仓数量=sum(b.出仓数量) from 出仓表 a join 出仓明细表 b on a.单据编号=b.单据编号

) c on a.物料编码=c.物料编码
group by a.物料编码,a.物料,a.规格,a.颜色
,b.进仓日期,c.出仓日期,a.单位
pnnm 2003-11-18
  • 打赏
  • 举报
回复
我先记下了
Angelnet 2003-11-18
  • 打赏
  • 举报
回复
zjcxc(邹建) ( ) 非常感谢你,但是我的进仓日期和进仓数量不在同一个表,进仓日期在进仓主表里,进仓数量在进仓明细表里。

出仓日期和出仓数量也是不在同一个表里,一个在主表,一个在明细表
pengdali 2003-11-17
  • 打赏
  • 举报
回复
不知道什么意思??

select * from 表 whwre 进仓日期 between '2003-11-10' and '2003-10-15'

对进仓日期建立索引
txlicenhe 2003-11-17
  • 打赏
  • 举报
回复
两种方案都可行,不过我是用专门的表来处理的,用触发器维护此表即可。
Angelnet 2003-11-17
  • 打赏
  • 举报
回复
物料编码 物料 规格 颜色 进仓日期 进仓数量 出仓日期 出仓数量 单位 当前库存
001 书纸 20*30 红 2003-10-11 50 2003-10-11 20 张 30
001 书纸 20*30 红 2003-10-11 80 张 110
002 皮纸 20*30 红 2003-10-11 80 张 80
002 皮纸 20*30 红 2003-10-11 40 张 40

34,668

社区成员

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

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