如何写这个复杂的进销存SQL语句? (200分)

  • 主题发起人 主题发起人 zsalean
  • 开始时间 开始时间
Z

zsalean

Unregistered / Unconfirmed
GUEST, unregistred user!
请看下A,B,C表:
A表(审核后统计表):
类型 数量 结余
初始设置 13 13
入库 10 23
出库 -5 18

B表:
类型 数量 审核
入库 10 N

C表
类型 数量 审核
出库 5 N

我用union合并查询,查询后结果如下:
类型 数量 结余
初始设置 13 13
入库 10 23
出库 -5 18
入库 10
出库 -5
请高手指点,我用的是SQL7.0数据库,怎么样才能用SQL语句,
把后面没有结余的记录计算出结余数?
我现做的是二次开发,不能更改原程序的流程,
目前,原程序的流程是:B,C表的记录审核后会形成A表的记录,
但没审核的数据就不会形成A表的记录,
我想只要输入了没审核的记录,我就能查询出来,但不能更改A表的内容(改变A表的任务
留给原程序),说白了,我就想要一个明细并得到现存量。
 
你想得到的结果是不是
类型 数量 结余
初始设置 13 13
入库 10 23
出库 -5 18
入库 10 28
出库 -5 23
B表和C表中最多有多少记录?
 
这样行不行,在B、C中插入记录的时候,在A中生成相应的记录,并统计结余。
 
用触发器直接在A中生成记录,并统计结余。
下面是对B写的触发器
CREATE TRIGGER ta2 ON [dbo].[TABLE2]
instead of INSERT
AS
declare
@a char(4),
@b int,
@c int

set @a=(select a from inserted)
set @b=(select b from inserted)
set @c=(select sum(b) from table1)+@b

insert table1
values(@a,@b,@c)
 
ysai:我想的就是这样的结果。
秋风:
我现做的是二次开发,不能更改原程序的流程,
目前,原程序的流程是:B,C表的记录审核后会形成A表的记录,
但没审核的数据就不会形成A表的记录,
我想只要输入了没审核的记录,我就能查询出来,但不能更改A表的内容(改变A表的任务
留给原程序),说白了,我就想要一个明细并得到现存量。
 
入库数量和节余的数据集:
select f.材料型号,f.数量,(f.数量+g.数量) as 结余 from tableb f,(select 材料型号,sum(数量) as 数量
from tablea where 审核='N' group by 材料型号) g where f.材料型号=g.材料型号
出库数量和节余的数据集:
select j.材料型号,j.数量,(k.数量-j.数量) as 结余 from tablec j,入库数量和节余的数据集 k
where j.审核='N' and j.材料型号=k.材料型号

将 tablea和上面两个数据集union起来
哈哈!看上去太烦琐了,而且还不能明细完整,不好意思了
 
我考虑过这个问题,
有兴趣与我联系,
liguigao@hotmail.com
 
(selct *
from a
union
select b.数量,‘’
from b)
union
select -c。数量
from c
 
没有人能回答这样的问题,我怎么样分配分数呢?
 
再过一个星期就分酌配金钱了,谁回复了都有分。
 
你的问题可以用存储过程解决:
先建立一个临时表,然后用 union 联合语句将查询结果插入到该临时表中,
该表中要一个ID Field,插入的结果如你列出的,外加一个ID ,然后做一个循环
对结余Field 重新付值,查询完后,再Drap掉该临时表。
顺便说一下,最好升级到Sql2000.
 
你的B表和C表应该有个日期字段,要不然怎么知道是先算B表还是C表呢?

如果有B表或(和)C表有多条记录,确实不好办,至少我不知道
 
若还在设计中,可以参考我贴的办法
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1114792

若已经定形了,就看其它朋友的办法啦
 
我已经搞定了,发分,答者有份。
 
后退
顶部