一个奇怪的问题,求达人解释!
原来的 统计:
--调度员工作量统计
--DECLARE @BeginTime DATETIME
--DECLARE @EndTime datetime
--SET @BeginTime = '2005-5-15 0:0:0'
--SET @EndTime = '2006-5-16 0:0:0'
SET NOCOUNT ON
declare @T table(调度员 varchar(12),呼救次数 int,接听次数 int,骚扰次数 int)
insert into @T
select
调度员 = tp.姓名,
呼救次数 = sum(case when tll.呼入时刻 is not null then 1 else 0 end),
接听次数 = sum(case when tll.结果编码 = 4 then 1 else 0 end),
骚扰次数 = sum(case when tll.记录类型编码 = 4 then 1 else 0 end)
from Ttellog tll
left join Tperson tp on tll.调度员工号 = tp.编码
group by tp.姓名
--调派:中止任务,正常完成,放空车,受理:再加上拒绝出车
declare @TC table(调度员 varchar(12),受理次数 int,调派次数 int,恶意次数 int,其中空车次数 int,其中抢救次数 int,其中转运次数 int)
insert into @TC
select
调度员 = tp.姓名,
受理次数 = sum(case when tt.出车结果编码 <> 1 then 1 else 0 end),
调派次数 = sum(case when tt.出车结果编码 in (2,3,4) then 1 else 0 end),
恶意次数 = sum(case when tal.通话类型编码 = 6 then 1 else 0 end),
其中空车次数 = sum(case when tt.出车结果编码 = 3 then 1 else 0 end),
其中抢救次数 = sum(case when tae.事件类型编码 = 2 then 1 else 0 end),
其中转运次数 = sum(case when tae.事件类型编码 in (3,5) then 1 else 0 end)
from Ttask tt
left join TAlarmCall tal on tal.事件编码 = tt.事件编码
left join TacceptEvent tac on tt.事件编码 = tac.事件编码
left join TAlarmEvent tae on tae.事件编码 = tt.事件编码
left join Tperson tp on tp.编码 = tt.责任调度人编码
inner join TpatientRecord tpr on tpr.任务编码 = tt.任务编码
left join TChargeLink tcl on tcl.任务编码 = tpr.任务编码 and tcl.收费序号 = tpr.收费序号
left join TchargeRecord tcr on tpr.收费序号 = tcr.收费序号 and tpr.任务编码 = tcr.任务编码
where tac.开始受理时刻 >=@BeginTime and tac.开始受理时刻 <@EndTime
and tae.事件性质编码 <>10
group by tp.姓名
declare @TD table( 调度员 varchar(12),呼救次数 int,接听次数 int,恶意骚扰次数 int,受理次数 int, 调派次数 int,其中空车次数 int,其中抢救次数 int,其中转运次数 int)
insert into @TD
select
调度员 = tc.调度员,
呼救次数 = t.呼救次数,
接听次数 = t.接听次数,
恶意骚扰次数 = t.骚扰次数 + tc.恶意次数,
受理次数 = tc.受理次数,
调派次数 = tc.调派次数,
其中空车次数 = tc.其中空车次数,
其中抢救次数 = tc.其中抢救次数,
其中转运次数 = tc.其中转运次数
from @T t,@TC tc
where isnull(t.调度员,'') = tc.调度员
insert into @TD
select
调度员 = '合计',
呼救次数 = sum(t.呼救次数),
接听次数 = sum(t.接听次数),
恶意骚扰次数 = sum(t.骚扰次数) + sum(tc.恶意次数),
受理次数 = sum(tc.受理次数),
调派次数 = sum(tc.调派次数),
其中空车次数 = sum(tc.其中空车次数),
其中抢救次数 = sum(tc.其中抢救次数),
其中转运次数 = sum(tc.其中转运次数)
from @T t,@TC tc
where isnull(t.调度员,'') = tc.调度员
select * from @TD
SET NOCOUNT OFF
------------------------------------------------------------------------------------------
现在的统计:
--调度员工作量统计
DECLARE @BeginTime DATETIME
DECLARE @EndTime datetime
SET @BeginTime = '2005-07-28 00:00:00'
SET @EndTime = '2006-12-01 00:00:00'
--SET ANSI_WARNINGS OFF------------------------------这个是问了某帅哥后加上的!!!
SET NOCOUNT ON
declare @TA table(调度员 varchar(12),恶意次数 int,派车次数 int,正常完成 int,中止任务 int)
insert into @TA
select
调度员 = tt.责任调度人编码,
恶意次数 = sum(case when tal.通话类型编码 = 6 then 1 else 0 end),
派车次数 = (count(distinct(case when tt.出车结果编码 <> 1 then tt.任务编码 end))),
正常完成 = (count(distinct(case when tt.出车结果编码 in (3,4) then tt.任务编码 end))),
中止任务 = (count(distinct(case when tt.出车结果编码 = 2 then tt.任务编码 end)))
from Ttask tt
left join TAlarmEvent tae on tae.事件编码 = tt.事件编码
left join TAlarmCall tal on tal.事件编码 = tt.事件编码
where tae.首次受理时刻 >=@BeginTime and tae.首次受理时刻 <=@EndTime
and tae.事件性质编码 <>10
group by tt.责任调度人编码
declare @TB table(调度员 varchar(12),呼救次数 int,接听次数 int)
insert into @TB
select
调度员 = tll.调度员工号,
呼救次数 = sum(case when tll.震铃时刻 is not null then 1 else 0 end),
接听次数 = sum(case when tll.通话时刻 is not null then 1 else 0 end)
from Ttellog tll
where tll.通话时刻 >=@BeginTime and tll.通话时刻 <=@EndTime
and tll.记录类型编码 <> 6
group by tll.调度员工号
declare @TC table(调度员 varchar(12),完整任务 int,空车 int,完整_抢救次数 int,完整_转院次数 int)
insert into @TC
select
调度员 = tt.责任调度人编码,
完整任务 = count(distinct(case when tcr.已收标志编码 = 1 and tt.出车结果编码 = 4 then (tpr.任务编码 + convert(varchar(1),tpr.序号)) end)),
空车 = count(distinct(case when tt.出车结果编码 in (3,4) then (tpr.任务编码 + convert(varchar(1),tpr.序号)) end)) -
count(distinct(case when tcr.已收标志编码 = 1 and tt.出车结果编码 = 4 then (tpr.任务编码 + convert(varchar(1),tpr.序号)) end)),
完整_抢救次数 = count(distinct(case when tcr.已收标志编码 = 1 and tt.出车结果编码 = 4 and tae.事件类型编码 = 2 then (tpr.任务编码 + convert(varchar(1),tpr.序号)) end)),
完整_转院次数 = count(distinct(case when tcr.已收标志编码 = 1 and tt.出车结果编码 = 4 and tae.事件类型编码 in (3,5) then (tpr.任务编码 + convert(varchar(1),tpr.序号)) end))
from TTask tt
left join TAlarmEvent tae on tae.事件编码 = tt.事件编码
left join TPatientRecord tpr on tpr.任务编码 = tt.任务编码
left join TchargeRecord tcr on tpr.任务编码 = tcr.任务编码 and tpr.收费序号 = tcr.收费序号
where tae.首次受理时刻 >=@BeginTime and tae.首次受理时刻 <=@EndTime
and tae.事件性质编码 <>10
group by tt.责任调度人编码
select * into #tt from
(
select
调度员 = tp.姓名,
呼救次数 = isnull(b.呼救次数,0),
接听次数 = isnull(b.接听次数,0),
恶意次数 = isnull(a.恶意次数,0),
派车次数 = isnull(a.派车次数,0),
正常完成 = isnull(a.正常完成,0),
完整任务 = isnull(c.完整任务,0),
空车 = isnull(c.空车,0),
中止任务 = isnull(a.中止任务,0),
完整_抢救次数 = isnull(c.完整_抢救次数,0),
完整_转院次数 = isnull(c.完整_转院次数,0)
from Tperson tp
left join @TA a on a.调度员 = tp.编码
left join @TB b on b.调度员 = tp.编码
left join @TC c on c.调度员 = tp.编码
where tp.实力种类编码 = 0
union all
select
调度员 = '合计',
呼救次数 = sum(isnull(b.呼救次数,0)),
接听次数 = sum(isnull(b.接听次数,0)),
恶意次数 = sum(isnull(a.恶意次数,0)),
派车次数 = sum(isnull(a.派车次数,0)),
正常完成 = sum(isnull(a.正常完成,0)),
完整任务 = sum(isnull(c.完整任务,0)),
空车 = sum(isnull(c.空车,0)),
中止任务 = sum(isnull(a.中止任务,0)),
完整_抢救次数 = sum(isnull(c.完整_抢救次数,0)),
完整_转院次数 = sum(isnull(c.完整_转院次数,0))
from @TA a
left join @TB b on b.调度员 = a.调度员
left join @TC c on c.调度员 = a.调度员
) xx
select * from #tt
drop table #tt
SET NOCOUNT OFF
------------------------------------------------------------------------------------------
呵呵,我的这个统计是写在EXCEL里面的!原来的是可以出数据的!
后来我改的就不能了!报错是打开数据集出错!
无奈啊!后来经高人指点加了
--SET ANSI_WARNINGS OFF------------------------------这个是问了某帅哥后加上的!!!
就没有这个问题了!现在问题是解决了!
因为这个帅哥也对这个其中的原理不是很确定,所以请达人帮助!!!
解释其中的原理,我们一起学习学习!
------------------------------------------------------------------------------------------
在此先谢过了!