有三张表,进货表、销售表、库存表 想用EXCEL表格做一个库存表!详情如下!

作者&投稿:驷俗 (若有异议请与网页底部的电邮联系)
只要你再建一个商品表~~设置商品编号是主键

你的三张表 里也要放上商品编号~并且把商品编号作为商品表里商品编号的外键~~一切都解决了。

--------给你一个我以前做的库

------------
-开始创建数据库

create database test
on primary
(name='test_mdf',
filename='F:\SQL server\test.mdf',
size=5,
maxsize=10,
filegrowth=1)
log on
(name='test_ldf',
filename='F:\SQL server\test.ldf',
size=5,
maxsize=10,
filegrowth=1)
--以上创建了一个数据库名字为“test”,路径为“F:\SQL server\XXX”其他不做解释。

use test
go
--开始使用数据库。

--开始建表
--共7个表,大部分都是NOT NULL,只有极少数后面做触发器的字段没做NOT NULL

--1.下面开始创建货物表,名字为“goods”,此表给客户看,好让他们花钱啊。
--字段为:
--货品编号goods_id(主键约束),货品名称goods_name,货品单位goods_unit,货品介绍goods_txt。
create table goods (goods_id int constraint PK_good_id primary key,goods_name varchar(20) not null,goods_unit varchar(6) not null,goods_txt text not null)
go

--2.创建用户表,名字为“goods_user”,用此表给分配权限,或者说是限制使用select,必须登陆才能看某项表(思考中暂时不做了,准备在前台实现。)
--字段为:
--用户编号(登录用),用户密码,人员姓名,用户类别,用户类别只有在数据库中手动修改,不许擅自改动。
create table goods_user (userid int constraint FK_user_id primary key,user_password varchar(20) not null,user_name varchar(10),user_type varchar(10) not null)
go

--3.创建进货表,名字为“goods_in”,为仓库管理员使用。
--字段为:
--进货批号in_id(主键约束),货品编号goods_id(外键关联货物表"goods"),进货单价in_price(约束>0),
--计量单位goods_unit,进货数量in_sum(约束>0),总价值in_money,收货人编号(仓库管理员)in_who(外键联goods_user的userid)
--再加个时间in_time,默认当前就好。
create table goods_in (in_id int constraint PK_in_id primary key,goods_id int constraint FK_goods_id foreign key references goods(goods_id) not null,in_price money constraint CK_in_price check(in_price>0) not null,goods_unit varchar(6),in_sum int constraint CK_in_sum check(in_sum>0) not null,in_money money,in_who int constraint FK_in_who foreign key references goods_user(userid) not null,in_time datetime constraint DF_in_time default GETDATE())
go

--4.创建出货表,名字为“goods_out”,为销售人员使用。
--字段为:
--销售编号out_id(主键约束),货品编号goods_id(外键关联货物表"goods"),销售单价out_price(约束>0),
--计量单位goods_unit,销售数量out_sum(约束>0),总价格out_money,销售人员编号out_who(外键联goods_user的userid)
--建个时间out_time默认当前。
--增加一个状态字段goods_now,目的是为了给退货商品做个标记。
create table goods_out (out_id int constraint PK_out_id primary key,goods_id int constraint FK_goods_id1 foreign key references goods(goods_id) not null,out_price money constraint CK_out_price check(out_price>0) not null,goods_unit varchar(6),out_sum int constraint CK_out_sum check(out_sum>0) not null,out_money money,out_who int constraint FK_in_who1 foreign key references goods_user(userid) not null,out_time datetime constraint DF_out_time default GETDATE(),goods_now varchar(4))
go

--5.创建库存表,名字为“goods_have”,此表内容准备让系统自动生成。
--字段为:
--货品编号goods_id,库存数量goods_sum(约束>=0),计量单位goods_unit,库存价值goods_money(约束>=0)
create table goods_have (goods_id int constraint FK_goods_id3 foreign key references goods(goods_id) not null,goods_sum int constraint CK_goods_sum check(goods_sum>=0) not null,goods_unit varchar(6) not null,goods_money money constraint CK_goods_money check(goods_money>=0))
go

--6.创建利润表,名字为“goods_win”,此表只允许老板看。
--字段为:
--货品编号goods_id,计量单位goods_unit,销售总额win_money(约束>=0),进货金额lose_money(约束>=0),
--利润率go_win
create table goods_win (goods_id int constraint FK_goods_id4 foreign key references goods(goods_id) not null,goods_unit varchar(6) not null,win_money money constraint CK_win_money check(win_money>=0),lose_money money constraint CK_lose_money check(lose_money>=0),go_win money)
go

--7.补充一个退货表,或者称为反库表“goods_return”
--字段为:
--退货批号return_id(主键约束),购货编号out_id(外键连接goods_out的“out_id”),退货原因return_why,退货时间return_time
create table goods_return (return_id int constraint PK_return_id primary key,out_id int constraint FK_in_id foreign key references goods_out(out_id) not null,return_why text not null,return_time datetime constraint DF_return_time default GETDATE())
go

--下面创建存储过程1产品表的;2进货表的;3出货表的;4用户表(注册用户可以看到的更详细,老板可以查看利润等全部表,员工可以查看与增加自己的出货表,仓库管理员可以查看增加进货表)
--共6个存储过程

--1.货品表增存储过程:
--@goods_id编号,@goods_name货品名,@goods_unit货品单位,@goods_txt货品说明
create procedure procedure_goods_insert
(@goods_id int,@goods_name varchar(20),@goods_unit varchar(6),@goods_txt text)
as
insert into goods values(@goods_id,@goods_name,@goods_unit,@goods_txt)
go
--2.货品表删除货品的存储过程:
--@goods_id编号,@goods_name货品名(必须同时编号和货物名称都填对了才可能删除)
create procedure procedure_goods_delete
(@goods_id int,@goods_name varchar(20))
as
delete from goods where goods_id=@goods_id and goods_name=@goods_name
go
--3.货品表修改货品说明的存储过程:
--@goods_id编号,@goods_txt货品说明
create procedure procedure_goods_update
(@goods_id int,@goods_txt text)
as
update goods set goods_txt=@goods_txt where goods_id=@goods_id
go

--4.创建进货表增加存储过程(进货表不允许出错另外为了防止仓库管理员舞弊,不做删除与修改进货表的存储过程):
--@in_id进货批号,@goods_id货品编号,@in_price进货单价,@goods_unit货品单位,@in_sum进货数量,@in_money合计金额
--@in_who收货人编号(仓库管理员),最后附加当前时间
create procedure procedure_goods_in
(@in_id int,@goods_id int,@in_price money,@in_sum int,@in_money money,@in_who int)
as
insert into goods_in values(@in_id,@goods_id,@in_price,(select goods_unit from goods where goods.goods_id=@goods_id),@in_sum,@in_money,@in_who,getdate())
go
--5.创建出货表增加存储过程(出货表不允许出错另外为了防止销售人员舞弊,不做删除与修改出货表的存储过程):
--@out_id销售编号,@goods_id货品编号,@out_price销售单价,@goods_unit货品单位,@out_sum销售数量,@out_money合计金额
--@out_who销售人员编号,最后附加当前时间
create procedure procedure_goods_out
(@out_id int,@goods_id int,@out_price money,@out_sum int,@out_money money,@out_who int)
as
insert into goods_out values(@out_id,@goods_id,@out_price,(select goods_unit from goods where goods.goods_id=@goods_id),@out_sum,@out_money,@out_who,getdate(),null)
go

--6.补充一个存储过程退货表的。
--@return_id退货批号,@out_id购货编号,@return_why退货原因
create procedure procedure_goods_return
(@return_id int,@out_id int,@return_why text)
as
insert into goods_return values(@return_id,@out_id,@return_why,getdate())
go

--下面创建触发器
--共4个触发器

--1.创建进货表与出货表的触发器,同时修改库存表的某产品数量和此种产品的总金额;
--为了防止销售人员或者仓库管理员造假或误填货品价值。
--另外触发器在这里面还实现了另一个目的:让goods表中的goods_nuit字段内容直接赋予goods_in的相应字段值避免填写错误或麻烦。
create trigger T_insert_goods_in
on goods_in for insert
as
begin transaction--准备修改进货表的总金额数量,以防工作人员出现误差。
update goods_in set in_money=in_price*in_sum,goods_unit=(select goods_unit from goods where goods_id in (select goods_id from inserted)) where in_id in (select in_id from inserted)
if @@error<>0
rollback transaction
else--准备修改库存表,关键修改此次进货后的某产品总量和总价值。
update goods_have set goods_sum=goods_sum+(select in_sum from inserted),goods_money=goods_money+((select in_price from inserted)*(select in_sum from inserted )) where goods_id in (select goods_id from inserted)
if @@error<>0
rollback transaction
else--准备执行了
commit transaction
go
--进货表单次某品种进货价值--触发器在上面--后期又附加了同时修改库存表的语句。

--2.出货表单次某品种进货价值--触发器在下面--看来也得加上修改库存的语句了。
--另外触发器在这里面还实现了另一个目的:让goods表中的goods_nuit字段内容直接赋予goods_out的相应字段值。
create trigger T_insert_goods_out
on goods_out for insert
as
begin transaction--防错系统启动,就算销售人员填错了也会纠正过来。
update goods_out set out_money=out_price*out_sum,goods_unit=(select goods_unit from goods where goods_id in (select goods_id from inserted)) where out_id in (select out_id from inserted)
if @@error<>0
rollback transaction
else--库存变更
update goods_have set goods_sum=goods_sum-(select out_sum from inserted),goods_money=goods_money-((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted)) where goods_id in (select goods_id from inserted)
if @@error<>0
rollback transaction
else--营业额统计、成本核算、利润率计算
update goods_win set win_money=win_money+((select out_price from inserted)*(select out_sum from inserted )),lose_money=lose_money+((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted)),go_win=(win_money+((select out_price from inserted)*(select out_sum from inserted ))-(lose_money+((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted))))/(lose_money+((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted)))*100 where goods_id in (select goods_id from inserted)
commit transaction
go
--3.新品上市的时候,由于利润表和库存表里面都没有新产品的编号等信息,所以必须同时产生一些进货额、出货额都是0的数据。
create trigger T_insert_goods
on goods for insert
as
begin transaction
insert into goods_win values((select goods_id from inserted),(select goods_unit from inserted),0,0,0)
if @@error<>0
rollback transaction
else
insert into goods_have values((select goods_id from inserted),0,(select goods_unit from inserted),0)
if @@error<>0
rollback transaction
else
commit transaction
go

--4.补充退货时的触发器,当退货时,对销售表产生一个小标记miss,另外库存有影响,利润表也有影响
create trigger T_insert_goods_return
on goods_return for insert
as
begin transaction--退货后,销售表标记miss在相应的字段上
update goods_out set goods_now='miss' where out_id in (select out_id from inserted)
if @@error<>0
rollback transaction
else--修改库存表,库存+相应的退货量,金额+相应平均成本*退货数量
update goods_have set goods_sum=goods_sum+(select out_sum from goods_out where out_id in (select out_id from inserted)) ,goods_money=goods_money+(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))*(select out_sum from goods_out where out_id in (select out_id from inserted)) where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted))
if @@error<>0
rollback transaction
else--利润率也计算出来了--(问题是这次的利润率为什么不要*100就得到百分比的了)------
--此处增加if判断,如果销售额是‘0’,则,费用和利润率都为‘0’
if ((select win_money from goods_win where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))-(select out_money from goods_out where out_id in (select out_id from inserted)))=0
update goods_win set win_money=0,lose_money=0,go_win=0 where goods_id in (select goods_id from goods_out where out_id in(select out_id from inserted))
else
update goods_win set win_money=win_money-(select out_money from goods_out where out_id in (select out_id from inserted)),lose_money=lose_money-(select out_sum from goods_out where out_id in (select out_id from inserted))*(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted))),go_win=((win_money-(select out_money from goods_out where out_id in (select out_id from inserted)))-(lose_money-(select out_sum from goods_out where out_id in (select out_id from inserted))*(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted))))/(lose_money-(select out_sum from goods_out where out_id in (select out_id from inserted))*(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))))*1 where goods_id in (select goods_id from goods_out where out_id in(select out_id from inserted))
if @@error<>0
rollback transaction
else
commit transaction
go
--以上进货,出货都搞定了。退货还不是很完整。

--库存表思路:编号自己找(在后面整体编组GROUP BY),数量=进货数-出货数,价值=进货价*数量

--利润表思路:编号自己找,销售额=SUM(销售表的销售额),进货费用=(进货表的金额*销售表的销售数量),利润率=(销售额-进货费用)/进货费用

--最后决定库存表的触发器同时放在上面的进货和出货的存储过程中了。下面解释一下:
--进货时库存表一定发生变化。我们就找差值就好了数量,总价值;
--同理,出货时,库存表也要发生变化。

--为了方便测试在此处做几个数据
--必须要先填的是goods ,goods_user这两个表,否则其他的表都无法正常测试。

insert into goods values(1001,'rice','kg','good,if you have had it,you will want it again.')
insert into goods values(1002,'water','tin','very good')
insert into goods_user values(95001,'001','Lucy','xs')
insert into goods_user values(95002,'002','Tom','ck')
insert into goods_user values(95003,'003','Lily','rs')
insert into goods_user values(95004,'004','admin','lb')

只要再建商品表~~设置商品编号主键
三张表
里也要放上商品编号~并且把商品编号作商品表里商品编号外键~~切都解决了
--------给我前做库
------------
-开始创建数据库
create
database
test
on
primary
(name='test_mdf',
filename='F:\SQL
server\test.mdf',
size=5,
maxsize=10,
filegrowth=1)
log
on
(name='test_ldf',
filename='F:\SQL
server\test.ldf',
size=5,
maxsize=10,
filegrowth=1)
--上创建了数据库名字test路径F:\SQL
server\XXX其做解释
use
test
go
--开始使用数据库
--开始建表
--共7表大部分都NOT
NULL只有极少数面做触发器字段没做NOT
NULL
--1.下面开始创建货物表名字goods此表给客户看好让们花钱啊
--字段:
--货品编号goods_id(主键约束)货品名称goods_name货品单位goods_unit货品介绍goods_txt
create
table
goods
(goods_id
int
constraint
PK_good_id
primary
key,goods_name
varchar(20)
not
null,goods_unit
varchar(6)
not
null,goods_txt
text
not
null)
go
--2.创建用户表名字goods_user用此表给分配权限或者说限制使用select必须登陆才能看某项表(思考暂时做了,准备前台实现)
--字段:
--用户编号(登录用)用户密码人员姓名用户类别,用户类别只有数据库手动修改许擅自改动
create
table
goods_user
(userid
int
constraint
FK_user_id
primary
key,user_password
varchar(20)
not
null,user_name
varchar(10),user_type
varchar(10)
not
null)
go
--3.创建进货表名字goods_in,仓库管理员使用
--字段:
--进货批号in_id(主键约束)货品编号goods_id(外键关联货物表"goods")进货单价in_price(约束>0)
--计量单位goods_unit进货数量in_sum(约束>0)总价值in_money收货人编号(仓库管理员)in_who(外键联goods_useruserid)
--再加时间in_time默认当前好
--字段:
--销售编号out_id(主键约束)货品编号goods
查看原帖>>

在EXCEL工作簿中有三个表格,第一个是进货表,第二个是出货表,第三个是实际库存~

用sumifs()函数计算进货总量-sumifs()出货总量
期初库存,直接录入在进货表中,作个备注就可以了

用EXCEL主要是为了简化计算,公式一套所有要算的都能出来。
别人不知道你的一些选项是很难做出你要的表格的,结算做出来了你还是要自己手算。

EXCEL其实很好用 比如 A2=A3/A1 只需在A1和A3里填好数字,在A2输入 =A3/A1 就出来了
而且下面的B2 C2 D2。。。 都可以直接出来

如何用excel制作一个进货表、销售表、结存表。
答:1、先制作三张表格:一张进货表、一张销售表、最后一张结存表 2、制作进货表的表头;3、制作销货表的表头;4、制作结存表的表头;5、打开结存表,把鼠标放在b2单元格,之后点击公示栏的fx;6、点击之后页面会弹出“插入函数”,选择“SUMIF”,点击确定;7、确定之后,页面会弹出“函数参数”, 用...

excel进销存表格怎么做excel进销存表格模板
答:1. 首先,创建三张表格:进货表、销售表和结存表。2. 设计进货表的表头,包括必要的字段,如日期、供应商、品名、数量和金额等。3. 接着,设计销售表的表头,应包括日期、客户、品名、数量和金额等字段。4. 然后,创建结存表的表头,通常包含品名、库存数量和库存金额等字段。5. 打开结存表,将鼠标...

如何用excel做库存管理?
答:1. 创建三张表格:进货表、销售表和结存表。2. 制作进货表的表头,包括品名、数量、单价等字段。3. 制作销售表的表头,包括品名、销售数量、销售单价等字段。4. 制作结存表的表头,包括品名、结存数量、结存金额等字段。5. 在结存表中填写公式,计算结存数量。选中B2单元格,点击“插入”菜单中的“...

产品出入库存表怎么做用excel做进销存明细账表格的方法
答:在库存表的H列中,输入以下公式,从H2单元格开始:=SUMIF(进货表!$B$2:$B$1000, B2, 进货表!$G$2:$G$1000)这个公式将根据商品编号,从进货表中汇总进货数量。将此公式向下拖动以覆盖所有行。在库存表的I列中,输入以下公式,从I2单元格开始:=SUMIF(销售表!$B$2:$B$1000, B2, 销售...

怎样利用excel电子表格做库存管理
答:为了有效地使用Excel进行库存管理,请遵循以下步骤:1. 创建三张表格:进货记录表、销售记录表和结存记录表。2. 设计进货记录表的表头,包括品名、数量、单价和金额等必要字段。3. 制定销售记录表的表头,通常包括品名、销售数量和销售金额等字段。4. 制定结存记录表的表头,需包括品名、库存数量、单位...

在EXCEL工作簿中有三个表格,第一个是进货表,第二个是出货表,第三个是...
答:用sumifs()函数计算进货总量-sumifs()出货总量 期初库存,直接录入在进货表中,作个备注就可以了

WPS如何利用Excel制作进销存表
答:我们分别整理出三张表,第一张是2019年的进货明细表,第二张是2019年销售明细表,第三张为库存表,库存表只需要每个货品名称列一个即可: 第一步,我们来统计各项产品的进货量,在【J3】单元格输入公式=SUMIF($B$3:$B$12,I3,$C$3:$C$12): 第二步,来计算销售量,在【K3】...

在ACCESS中有三张表入库表、出库表和库存表。怎么实现入库的信息添加...
答:最简单的:库存表:型号,数量 存储表:产品编号,日期,数字存储 一个数据库表:编号,日期,数字图书馆到ACCESS“关系”的观点,添加三个表,存储表,出库表“型号”库存表“型号”连接,双击电缆,选择“包含的库存表中的所有记录,保存的关系。

有三张表,进货表、销售表、库存表
答:--共4个触发器--1.创建进货表与出货表的触发器,同时修改库存表的某产品数量和此种产品的总金额;--为了防止销售人员或者仓库管理员造假或误填货品价值。--另外触发器在这里面还实现了另一个目的:让goods表中的goods_nuit字段内容直接赋予goods_in的相应字段值避免填写错误或麻烦。create trigger T_insert_goods_...

请问1.有三张表,进货表和销售表输入后,总库存表不能自己根据进货表和销...
答:简单的公式循环.不过根据你说的,分三张表,做起来不好办,只要你其中一张表里擦入了其它东西,计算的结果就不对了!所以建议你把三张表建立在一张Excel上,只要自己处理得当,你想打印哪张就哪张?我就是这样操作的!