想写仓库管理,表不知怎建:入库表,出库表,库存表 是不是可合成一张表了??(25分)

  • 主题发起人 主题发起人 wyn
  • 开始时间 开始时间
W

wyn

Unregistered / Unconfirmed
GUEST, unregistred user!
想写仓库管理,表不知怎建:入库表,出库表,库存表 是不是可合成一张表了??
 
小姐,出入库一张表,库存一张表。
 
要不要现在的,给你一个
 
to 蛐蛐:"库存表"是不是可以从"出入库“算出呢?谢谢!
to chji:给我一个吧!谢谢!
分数太少了,我以后别的地方加
 
是,看你是做什么.如果是进销存,也就是交易类型较简单的话。应不难、
 
楼上说的对,
入库表,出库表和库存表不要合起来。
那样设计是错误的,在逻辑上就很混乱。
如果,入库,和出库操作的数据格式,
差不多,就可以合起来。要么,
也分开。
 
差不多,就可以合起来。要么,
也分开。不用分开。用交易类型来进行区分。
 
我仓库管理很簡單:入庫,出庫,每月盤點一次 是不是還要一張盤點表?
入庫出庫表我想合起來了,那麼库存表是不是每次入庫出庫都要去加減呢?
 
准确地说应当用三个表:
A 初始库存表
B 出入库表(用操作类型区分)
C 当前库存表
另:盘盈、盘亏……以至于其它所有出入库(如:返工出入、抽样送礼等),
也都可以作为一种出入库处理
有了A B 当然就可以计算得到C
 
Robin_Fang
准确地说应当用三个表:
A 初始库存表
B 出入库表(用操作类型区分)
C 当前库存表
另:盘盈、盘亏……以至于其它所有出入库(如:返工出入、抽样送礼等),
也都可以作为一种出入库处理
有了A B 当然就可以计算得到C
你的B表即交易,又要查询。如果记录很多。会很慢的。不信,你试试。
 
不需要另建盘点表,每个月程序自动生成就可以了
 
物品库存明细帐
仓库货位明细帐
仓库批次明细帐
仓库单件明细帐
库存盘点记录表
月收发存报表
年收发存报表
日收发存报表
库存历史情况报表
空货位报表
需检测物品表
资金占用情况表
ABC分类情况表(一般情况不需要)
库存成套情况报表
预期库存情况表
物品超警戒报表
订货点报警报表
存货周转率报表
库存积压情况报表
安全货存标准量报表

最好是每张报表都用一份
另外还有一些要求控制的表,就不好说了
每个系统都不一样
 
按照对象来建
 
不能合,数据没有了冗余效率很低
 
本人做过一个,只要互相关联就可以了
 
问题:如何用SQL语句对仓库数据汇总 ( 积分:50, 回复:26, 阅读:143 )
分类:数据库 - C/S型 ( 版主:千中元, kucio )
来自:misai, 时间:2001-9-12 15:50:00, ID:621951 [显示:小字体 | 大字体]
在下现有三个表,结构分别如下:
期初表: 编号 材料名称 期初库存
0001 电话机 8
0002 灯开关 5
收料表: 编号 材料名称 本期收料
0001 电话机 10
0003 电烙铁 15
发料表: 编号 材料名称 本期发料
0002 灯开关 3
想用SQL语句结出当前库存,显示成如下格式:
编号 名称 期初库存 本期收料 本期发料 当前库存
0001 电话机 8 10 18
0002 灯开关 5 3 2
0003 电烙铁 15 15
上述问题最好不用临时表,
本人所用工具为:delphi5.0+ado+sql server 2000



来自:misai, 时间:2001-9-12 15:58:00, ID:621976
上述问题SQL语句如何写,高手快来啊!


来自:sherman, 时间:2001-9-12 16:08:00, ID:622002
你应该使用full outer join,请查询sql2000的t-sql帮助


来自:misai, 时间:2001-9-12 16:18:00, ID:622032
to sherman:
我已经试过full outer join,可查询不出我要的结果,
请你亲自试试,此问题没那么简单


来自:misai, 时间:2001-9-12 16:35:00, ID:622067
大家帮帮我,分不够再加


来自:jianping0, 时间:2001-9-12 16:36:00, ID:622069
试一试这个:
select a.编号, a.材料名称,a.期初库存,b.本期收料, c.本期发料,a.期初库存+b.本期收料-c.本期发料
from 期初表 a,收料表 b,发料表 c
where (a outer join b on a.编号=b.编号) outer join c on a.编号=c.编号




来自:misai, 时间:2001-9-12 16:59:00, ID:622159
to jianping0:
你的答案我试过,有语法错误,请再想想办法


来自:misai, 时间:2001-9-12 17:17:00, ID:622208
请大家都来想办法,这是一个考验SQL能力的问题


来自:jianping0, 时间:2001-9-12 17:34:00, ID:622271
刚才没写好,是错了. 看看这个.

select m.编号, m.材料名称,m.期初库存,m.本期收料, c.本期发料,m.期初库存+m.本期收料-c.本期发料
from (select a.编号, a.材料名称,a.期初库存,b.本期收料
from 期初表 a outer join 收料表 b on a.编号=c.编号) m outer join 发料表 c on m.编号=c.编号




来自:sisha, 时间:2001-9-12 17:36:00, ID:622276
select a.编号, a.材料名称,a.期初库存,b.本期收料, c.本期发料,a.期初库存+b.本期收料-c.本期发料
from 期初表 a
join 收料表 b on a.编号=b.编号
join 发料表 c on a.编号=c.编号
不过用join,left join。。你就自己去试试,我也不记得啦。


来自:misai, 时间:2001-9-12 17:56:00, ID:622323
to jianping0:
还是有语法错误,这个语句比较长,请你最把调试过的源码贴上来,要不总有问题,
我弄了好长时间都不行。


来自:dlnew, 时间:2001-9-12 18:13:00, ID:622360
select a.编号, a.材料名称,a.期初库存,b.本期收料, c.本期发料,a.期初库存+b.本期收料-c.本期发料 as 当前库存
from 期初表 a
left join 收料表 b on a.编号=b.编号
left join 发料表 c on a.编号=c.编号


来自:misai, 时间:2001-9-13 7:32:00, ID:622971
to dlnew:
你的答案我试过,但结果出来只有0001,0002两条,0003没出来,把其中的left join改为
right join或full join 都不能出来预期的结果,看来这问题真的把大家难住啦?
请大家都来讨论!!!快来啊.


来自:misai, 时间:2001-9-13 7:51:00, ID:622975
高手都到哪里去啦,版主请帮帮忙吧


来自:Brave, 时间:2001-9-13 9:00:00, ID:623067
高手来了
这样写效率高,而且清楚:
select 编号,材料名称,sum(期初库存) 期初库存,sum(本期收料) 本期收料,sum(本期发料) 本期发料,
sum(期初库存+本期进料-本期发料) 期末结存 from
(
select 编号,材料名称,期初库存,0 本期收料,0 本期发料 from 期初表
union all
select 编号,材料名称,0 期初库存,本期收料,0 本期发料 from 收料表
union all
select 编号,材料名称,0 期初库存,0 本期收料,本期发料 from 发料表
) as a group by 编号,材料名称

顺便说一下,你的数据库设计好像违反了某一个范式,嘿嘿


来自:aspire, 时间:2001-9-13 9:45:00, ID:623185
如下语句可行,给分吧!,表A即期初表 ;A1为收料表; A2为发料表。NO--->编号;NAME-->
材料名称,openqty--->期初库存,inqty-->本期收料, outqty-->本期发料
select m.no, m.name,m.openqty,m.inqty, c.outqty,m.openqty+(case when m.inqty is null then
0 else
m.inqty end)-
(case when c.outqty is null then
0 else
c.outqty end)
from (select a.no, a.name,a.openqty,b.inqty
from a a left join a1 b on a.no=b.no
union select b.no,b.name,0,b.inqty
from a1 b where b.no not in (select no from a)) m left join a2 c on m.no=c.no
order by m.no


来自:rope, 时间:2001-9-13 10:24:00, ID:623286
Brave说的对,你的期初表设计的有问题,不管有没有期初值,
所有项目都应该在期初表里有一条记录。
如果是新加的,应该在期初表里面补一条记录。
另外,还是用临时表效率高,作程序要考虑到效率问题。


来自:misai, 时间:2001-9-13 10:33:00, ID:623306
to Brave:
你的答案我试了一下,提示:
'期初库存) 期初库存,sum(本期收料) 本期收料'等没有聚合函数或没加到GROUP BY
字句中,将上述一一加到GROUP BY后,可结出来的结果是明细,数量没有汇总,结果如下:
编号 名称 期初库存 本期收料 本期发料 当前库存
0001 电话机 0 10 0 10
0001 电话机 8 0 0 8
0002 灯开关 0 0 3 -3
0002 灯开关 5 0 0 5
0003 电烙铁 0 15 0 15
请再想想,好事做到底。
你说我的数据库设计违反了某一个范式,我数据库比较菜,请听听高论。


来自:Brave, 时间:2001-9-13 11:01:00, ID:623379
不可能,把你的SQL贴出来看一看!
group by 后面不能加那么多,只需要编号和名称就够了


来自:misai, 时间:2001-9-13 11:02:00, ID:623383
to rope:
想请教一下临时表的问题:
假设有一个临时表,表名为LS,存打印临时数据,
若用户A正选择打印姓 '王' 的人,则LS里生成的是 姓 '王' 的人,
若用户B想选择打印姓 '李' 的人,则LS里生成的是 姓 '李' 的人,
可用户A还没打完,这种情况该怎么办?


来自:misai, 时间:2001-9-13 11:15:00, ID:623405
to Brave:
SELECT 编号, 材料名称 , 期初库存 ,本期收料 ,本期发料 ,当前库存
FROM (SELECT 编号,材料名称, 期初库存, 0 本期收料, 0 本期发料
FROM 期初表
UNION ALL
SELECT 编号, 材料名称, 0 期初库存, 本期收料, 0 本期发料
FROM 收料表
UNION ALL
SELECT 编号, 材料名称, 0 期初库存, 0 本期收料, 本期发料
FROM 发料表) A
GROUP BY 编号, 材料名称 ,期初库存
ORDER BY 编号


来自:Brave, 时间:2001-9-13 11:19:00, ID:623418
错,本着负责的原则我实际做了一遍。(实际建了3个表,插入数据,然后执行,后面是结果)
为了你这点分,我容易吗?
字段采用的是拼音缩写。

select bh,mc,sum(qckc) qckc,sum(bqsl) bqsl,sum(bqfl) bqfl,sum(qckc+bqsl-bqfl) dqkc from
(
select bh,mc,qckc,0 bqsl,0 bqfl from qcb
union all
select bh,mc,0 qckc,bqsl,0 bqfl from slb
union all
select bh,mc,0 qckc,0 bqsl,bqfl from flb
) as a group by bh,mc order by bh

bh mc qckc bqsl bqfl dqkc
---------- ------------------------------ ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- -----------------------------------------------------
0001 电话机 8.0 10.0 0.0 18.0
0002 灯开关 5.0 0.0 3.0 2.0
0003 电烙铁 0.0 15.0 0.0 15.0
(3 row(s) affected)


来自:rope, 时间:2001-9-13 11:29:00, ID:623445
临时表只对生成临时表的那个连接(session)可见,
不要说是两个不同的用户,就是同一个用户把同样的
程序同时运行两次,程序生成的临时表都是不一样的,
呵呵。


来自:rope, 时间:2001-9-13 11:31:00, ID:623459
to misai
补充,你的那个LS不是临时表的概念,呵呵


 

Similar threads

后退
顶部