大家看看,我面试时招聘单位所出的面试题,回答正确的有分哦!```````````````````````

Toti 2005-11-21 01:21:31
以下是一个商品的进销存数据表
发生业务 发生数量 发生时间
进货 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
...全文
571 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhaihe 2005-11-22
  • 打赏
  • 举报
回复

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

Toti 2005-11-21
  • 打赏
  • 举报
回复
wangdehao(找找找)
=========================

加一个id列,如果发生时间是一个完整的时间也不会有问题的,为什么???????????????
子陌红尘 2005-11-21
  • 打赏
  • 举报
回复
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 #T
xueguang 2005-11-21
  • 打赏
  • 举报
回复
--麻烦点
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 行)
*/
jxdjxd1111 2005-11-21
  • 打赏
  • 举报
回复
TO: wangdehao(找找找)
试过了,还是不行
put2006 2005-11-21
  • 打赏
  • 举报
回复
时间肯定要修改,要不燃谁知道日期是同一天的几笔谁先谁后啊?
wangdehao 2005-11-21
  • 打赏
  • 举报
回复
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列,如果发生时间是一个完整的时间也不会有问题的
windbey 2005-11-21
  • 打赏
  • 举报
回复
mark
jxdjxd1111 2005-11-21
  • 打赏
  • 举报
回复
子陌兄:
如果同一天有两笔进货就会出问题啊?
子陌红尘 2005-11-21
  • 打赏
  • 举报
回复
select
期初库存=isnull((select sum(发生数量) from 表 where 发生时间<a.发生时间),0),
a.发生业务,
a.发生数量,
a.发生时间,
期末库存=(select sum(发生数量) from 表 where 发生时间<=a.发生时间)
from
表 a
order by
a.发生时间

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧