--库存统计示例:--数据测试环境
create table 物料明细表(
物料id varchar(6) primary key,
名称 varchar(8) not null,
规格 varchar(10),
颜色 varchar(4),
单位 varchar(4),
所属类别 varchar(6)
)create table 进仓主表 (
进仓id varchar(20) primary key,
供应商id varchar(10),
进仓日期 datetime,
原凭证号 varchar(10),
入库类型 int
)create table 进仓明细表 (
进仓id varchar(20) not null  constraint fk_进仓明细表_进仓主表 foreign key
references 进仓主表(进仓id) on update cascade on delete cascade,
物料id varchar(6) not null constraint fk_进仓明细表_物料明细表 foreign key
references 物料明细表(物料id) on update cascade on delete cascade,
数量 decimal(20,2),
constraint pk_进仓明细表 primary key clustered (进仓id,物料id),
)create table 出仓主表 (
出仓id varchar(20) primary key,
部门id varchar(10),
领料日期 datetime,
领料单号 varchar(10),
出库类型 varchar(1)
)create table 出仓明细表 (
出仓id varchar(20) not null constraint fk_出仓明细表_出仓主表 foreign key
references 出仓主表(出仓id) on update cascade on delete cascade,
物料id varchar(6) not null constraint fk_出仓明细表_物料明细表 foreign key
references 物料明细表(物料id) on update cascade on delete cascade,
数量 decimal(20,2),
constraint pk_出仓明细表 primary key clustered (出仓id,物料id)
)
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 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.出仓日期)go
--初始化数据
insert into 物料明细表
select 'a-001','皮纸','20×30×50','红','张','纸'
union all select 'b-002','磁铁','20×10×50','','块','五金'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',2insert 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.5insert 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'insert into 出仓明细表
select 'c-20031015-001','a-001',50
union all select 'c-20031016-001','a-001',50
go
--得到要求的结果
--进出记录表
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.物料idgo
--删除测试环境
drop view qry进仓单,qry出仓单,qry进出记录
drop table 进仓明细表,出仓明细表,物料明细表,进仓主表,出仓主表