当前位置: 代码迷 >> Sql Server >> 请问大侠帮忙,以下的sql如何写
  详细解决方案

请问大侠帮忙,以下的sql如何写

热度:30   发布时间:2016-04-27 19:12:19.0
请教大侠帮忙,以下的sql怎么写?
--历史记录表
create table call
(
callerid varchar(20),-- 主叫分机号
incalltime datetime,--打入时间
ansdtime datetime,--接起时间
uptime datetime,-- 挂断时间
talkdur int,--通话时间
agentid varchar(20), -- 被叫工号 
extno varchar(20) --被叫分机号 
)

--登录记录表
create table agentlog
(
agentid varchar(20),--工号 和operator表关联
extno varchar(20),--分机号
logintime datetime,--登录时间
legouttime datetime,--登出时间
)


--用户表
create table operator
(
uid varchar(20),--工号
passwords varchar(20),--密码
username varchar(20),--用户名
)

我现在要查出电话内线拨打记录的( 主叫工号、主叫用户名、主叫分机号、被叫工号、被叫用户名、被叫分机号、
接起时间、挂断时间、通话时间 )记录。
请问这个sql 怎么写?

查询出来显示如下:

主叫工号 主叫用户名 主叫分机号 被叫工号 被叫用户名 被叫分机号 接起时间 挂断时间 通话时间
6001 张三 8082 6003 李四 8085 2011-03-09 09:57:21 2011-03-09 09:57:33 12
6003 李四 8085 6002 小五 8083 2011-03-09 10:12:23 2011-03-09 10:12:33 10
6003 李四 8085 6001 张三 8082 2011-03-09 10:16:33 2011-03-09 10:16:38 5





------解决方案--------------------
数据库设计有冗余了,而且可能会产生冲突,不应有"被叫工号"列.
查询:

SQL code
select b.agentid,c.username,a.callerid,d.agentid,e.username,a.agentid,a.ansdtime,a.uptime,a.talkdurfrom call a inner join agentlog b on a.callerid=b.extnoinner join operator c on b.agentid=c.uidinner join agentlog d on a.extno=d.extnoinner join operator e on d.agentid=e.uid
------解决方案--------------------
SQL code
select *from(select   a.callerid,b.extno,c.usernamefrom   call a join agentlogon   a.callerid=b.extnojoin   operator con   b.agentid=c.uid)ajoin(select   a.agentid,a.extno,a.ansdtime,a.uptime,a.talkdur,c.usernamefrom      call a join agentlogon   a.callerid=b.extnojoin   operator con   b.agentid=c.uid)bon a.agentid=b.agentid
  相关解决方案