大家看看,我面试时招聘单位所出的面试题,回答正确的有分哦!```````````````````````
以下是一个商品的进销存数据表
发生业务 发生数量 发生时间
进货 10 2003/02/05
销售 -5 2003/02/08
进货 20 2003/02/10
进货 5 2003/02/15
销售 -15 2003/02/18
现在SQLSERVER数据库中,要求通过数据库计算(要求用函数,存储过程),返回以下结果
期初库存 发生业务 发生数量 发生时间 期末库存
0 进货 10 2003/02/05 10
10 销售 -5 2003/02/08 5
5 进货 20 2003/02/10 25
25 进货 5 2003/02/15 30
30 销售 -15 2003/02/18 15
问题点数:50、回复次数:10Top
1 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-11-21 13:30:49 得分 15
select
期初库存=isnull((select sum(发生数量) from 表 where 发生时间<a.发生时间),0),
a.发生业务,
a.发生数量,
a.发生时间,
期末库存=(select sum(发生数量) from 表 where 发生时间<=a.发生时间)
from
表 a
order by
a.发生时间Top
2 楼jxdjxd1111(qqq)回复于 2005-11-21 13:52:28 得分 5
子陌兄:
如果同一天有两笔进货就会出问题啊?Top
3 楼windbey(北风)回复于 2005-11-21 14:09:56 得分 0
markTop
4 楼wangdehao(找找找(现在很幸福))回复于 2005-11-21 14:19:23 得分 15
select id=identity(int,1,1),* into #t from 表
select
期初库存=isnull((select sum(发生数量) from 表 where id<a.id),0),
a.发生业务,
a.发生数量,
a.发生时间,
期末库存=(select sum(发生数量) from 表 where id<=a.id)
from
表 a
order by
a.id
---思路不变,加一个id列,如果发生时间是一个完整的时间也不会有问题的Top
5 楼put2006(冷眼螃蟹)回复于 2005-11-21 14:20:02 得分 5
时间肯定要修改,要不燃谁知道日期是同一天的几笔谁先谁后啊?Top
6 楼jxdjxd1111(qqq)回复于 2005-11-21 14:34:07 得分 0
TO: wangdehao(找找找)
试过了,还是不行Top
7 楼xueguang(xg)回复于 2005-11-21 15:16:42 得分 5
--麻烦点
set nocount on
declare @a table(发生业务 varchar(10),发生数量 int,发生时间 char(10))
insert @a select '进货',10 ,'2003/02/05'
insert @a select '销售',-5 ,'2003/02/08'
insert @a select '进货',20 ,'2003/02/10'
insert @a select '进货',5 ,'2003/02/15'
insert @a select '销售',-15,'2003/02/18'
declare @b table(id int identity(1,1),期初库存 int,发生业务 varchar(10),发生数量 int,发生时间 char(10),期末库存 int)
insert @b(发生业务,发生数量,发生时间) select 发生业务,发生数量,发生时间 from @a order by 发生时间
update @b set 期初库存=0,期末库存=发生数量 where id=1
update @b set 期初库存=(select 期末库存 from @b where id=1) where id=2
declare @i int
set @i=2
while @i<=(select max(id) from @b) begin
update @b set 期末库存=期初库存+发生数量 where id=@i
update @b set 期初库存=(select 期末库存 from @b where id=@i) where id=@i+1
set @i=@i+1
end
set nocount off
select 期初库存,发生业务,发生数量,发生时间,期末库存 from @b
/*结果
期初库存 发生业务 发生数量 发生时间 期末库存
----------- ---------- ----------- ---------- -----------
0 进货 10 2003/02/05 10
10 销售 -5 2003/02/08 5
5 进货 20 2003/02/10 25
25 进货 5 2003/02/15 30
30 销售 -15 2003/02/18 15
(所影响的行数为 5 行)
*/Top
8 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-11-21 16:52:51 得分 0
select identity(int,1,1) as id,* into #T from 表
select
期初库存=isnull((select sum(发生数量) from #T where 发生时间<=a.发生时间 and id<a.id),0),
a.发生业务,
a.发生数量,
a.发生时间,
期末库存=(select sum(发生数量) from #T where 发生时间<=a.发生时间 and id<=a.id)
from
#T a
order by
a.发生时间
drop table #TTop
9 楼Toti(连自己都承认不行,还有什么话好说!)回复于 2005-11-21 17:08:38 得分 0
wangdehao(找找找)
=========================
加一个id列,如果发生时间是一个完整的时间也不会有问题的,为什么???????????????Top
10 楼zhouhaihe()回复于 2005-11-22 11:19:48 得分 5
set nocount on
declare @a table(发生业务 varchar(10),发生数量 int,发生时间 char(20))
insert @a select '进货',10 ,'2003-02-05'
insert @a select '销售',-5 ,'2003-02-08 15:15:00'
insert @a select '进货',20 ,'2003-02-08 09:00:00'
insert @a select '进货',5 ,'2003-02-08 12:00:00'
insert @a select '销售',-15,'2003-02-18'
select identity(int,1,1) as id,* into #T from @a order by 发生时间
select
期初库存=isnull((select sum(发生数量) from #T where 发生时间<=a.发生时间 and id<a.id),0),
a.发生业务,
a.发生数量,
a.发生时间,
期末库存=(select sum(发生数量) from #T where 发生时间<=a.发生时间 and id<=a.id)
from
#T a
order by
a.发生时间
drop table #T
Top




