首页 新闻 会员 周边

sql存储过程问题,高手进。。

0
悬赏园豆:20 [已解决问题] 解决于 2010-08-25 17:30

用存储过程来实现一天中登陆系统员工的接打电话量:首先要查出当天所有登陆系统员工的登陆时间和uid(员工一天中可多次登陆系统)。然后根据登陆时间和uid到另张表中查询登陆时间内该员工的接打电话量。问题是怎样保存查询出员工的登陆时间和uid,并根据登陆时间和uid查询电话量?

问题补充: loginlog表 记录员工登陆系统的信息 uid varchar(20) 工号 logintime datetime 登陆系统时间 logouttime datetime 登出系统时间 calllog表 记录员工接打电话明细 uid varchar(20) 工号 incalltime datetime 接电话的时间 outcalltime datetime 打电话的时间 要求显示结果:(登陆时间内员工的接打电话量) 工号 登陆时间 登出时间 接电话量 打电话量
Mafer的主页 Mafer | 初学一级 | 园豆:80
提问于:2010-08-25 10:31
< >
分享
最佳答案
0

涉及:声明临时表、镶嵌子查询、关联表。

首先、需求是查询出特定人登录后的电话量。电话量是一个数字。确定目标 :电话记录表

select count(*) from 电话记录表 where uid=登录人 and 接听时间>=登录起始时间 and 接听时间<=登录结束时间

其次,登录人、登录时间、登录结束时间。是结果查询的必要条件。 所以可以用临时表、或者直接子查询来确定查询的目标的三项信息。

declare @user int ,@登录时间 datetime,@登录结束时间 datetime

select @user=登录人,@登录时间=登录时间,@登录结束时间=登录结束时间 from 登录记录表 where 登录人ID=参数

如果是一组人的电话量,那就直接在电话信息表中 查询后添加Group by user 来得到 一组数据。

收获园豆:20
邢少 | 专家六级 |园豆:10926 | 2010-08-25 10:52
将查询出所有的登录人及登录时间、登录结束时间的结果存入临时表中,然后怎样取出该结果的值,因为临时表中存的不是一条数据。
Mafer | 园豆:80 (初学一级) | 2010-08-25 14:51
你在定义这个存储过程中,既然要查某个人的电话量,那么得给存储过程传递一个“登录人”的参数吧。 在临时表中根据这个参数应该可以确定一条登录信息。或者一段登录时间。 然后根据这个登录时间来得到电话量的集合。
邢少 | 园豆:10926 (专家六级) | 2010-08-25 16:27
查询的是所有人登陆时间内的电话量,不是某个人。 我在网上找到用游标的方法来实现从登陆信息表中逐条将读取的工号及登陆时间赋值給变量,然后根据变量查询出该工号的电话量。
Mafer | 园豆:80 (初学一级) | 2010-08-25 17:29
其他回答(2)
0

最好给出数据,和想要的结果

 

猜的,不知道是不是这个意思

select a.uid,b.接打电话量 from user_LoginLog a left join user_telephone b on a.uid = b.uid and a.LoginTime = b.LoginTime where CONVERT(varchar, a.LoginTime, 112 ) = CONVERT(varchar, getdate(), 112 )

 

jowo | 园豆:2834 (老鸟四级) | 2010-08-25 10:37
0

保存提供5种方法:

1. 正式表.

2. 临时表 #tempTable

3. 表变量 @EmployeeTable

4. 子查询

5. CTE

changbluesky | 园豆:854 (小虾三级) | 2010-08-25 13:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册