一个奇怪的问题,求达人解释!

being21 2006-08-24 06:14:34
原来的 统计:
--调度员工作量统计

--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------------------------------这个是问了某帅哥后加上的!!!
就没有这个问题了!现在问题是解决了!
因为这个帅哥也对这个其中的原理不是很确定,所以请达人帮助!!!
解释其中的原理,我们一起学习学习!
------------------------------------------------------------------------------------------
在此先谢过了!
...全文
299 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
being21 2006-08-25
  • 打赏
  • 举报
回复
case when tt.xxx = 1 then 1 end
case when tt.xxx = 1 then 1 else 0 end

这个原因导致得。
leongwong 2006-08-25
  • 打赏
  • 举报
回复
关注一下!
being21 2006-08-25
  • 打赏
  • 举报
回复
呵呵!
忘记把在查询分析器里面的错误结果帖出来了!

警告: 聚合或其它 SET 操作消除了空值。
警告: 聚合或其它 SET 操作消除了空值。

先谢谢大家!!
feifeiyaqi2 2006-08-25
  • 打赏
  • 举报
回复
*****************************************************
大家了注意,这家公司是外地人在北京开的,公司的老板注册的工商执照是借朋友身份证办的,注册资金不到5万,而上面他说的全是骗人的。老板扣工人的工资的人很多,完了还会找人打你,特没劲。
******************************************************************
**********************************




北京易佳贝营销顾问有限公司
公司行业: IT服务/多领域经营 互联网/电子商务

公司类型: 民营

公司规模: 20-99人





企业简介:

北京易佳贝营销顾问有限公司,以营销咨询、培训、项目推广、网络建设及推广为主营业务。其中,营销咨询、培训业务以服务于国内大中型企业300多家,举办大型营销主题培训班180余期,接受委托或自行代理的全国项目已实现销售总额人民币3亿元。

易捷中国网是由香港扬华国际集团、北京易佳贝营销顾问有限公司共同投资1.1亿元人民币兴建的专业型商业项目网站。公司本着"高位起步、高标建设、高速发展"的策略,致力于打造全球最大的项目投资网络平台。

易捷中国网目前正在实施"007品牌工程",拟建100家地级、1000家县级分站,以"信息快速交换、传播快速有效、价值快速回报"为宗旨和目标,为广大客户提供在线三快的商务服务。追逐梦想、勇于创新、敢为人先、缔造卓越是我们的集体素描;诚信、拼搏、团结、协作是我们的行为语言;我们提倡公平、公正、严格的工作氛围,信奉付出与收获对等的工作原则;我们秉承以人为本的宗旨,以完善的现代企业经营制度吸引国内外优秀的技术、营销与管理人才。热忱欢迎怀抱梦想、德才兼备的各方才俊加入易捷中国,共创美好未来!

北京易佳贝武汉分公司成立于2006年8月1日,是公司发展战略中的重要一部分。
zjcxc 元老 2006-08-24
  • 打赏
  • 举报
回复
如果不加的话, 你调用时, 警告信息也会返回给调用者, 这会令你的调用程序首先得到的不是正确的结果集.

你其实可以用 nextrecord 属性(如果是adodb.recordset对象的话)翻到正确的结果集上.
zhenmeiyisi 2006-08-24
  • 打赏
  • 举报
回复
联机帮助

SET ANSI_WARNINGS 影响以下情况:

当设置为 ON 时,如果聚合函数(如 SUM、AVG、MAX、MIN、STDEV、STDEVP、VAR、VARP 或 COUNT)中出现空值,将生成警告信息。当设置为 OFF 时,不发出警告。


当设置为 ON 时,被零除错误和算术溢出错误将导致回滚语句并生成错误信息。当设置为 OFF 时,被零除错误和算术溢出错误将导致返回空值。如果在 character、Unicode 或 binary 列上尝试执行 INSERT 或 UPDATE 操作,而这些列中的新值长度超出最大列大小,则被零除错误和算术溢出错误将导致返回空值。如果 SET ANSI_WARNINGS 为 ON,则按 SQL-92 标准的指定将取消 INSERT 或 UPDATE。将忽略字符列的尾随空格,忽略二进制列的尾随零。当设置为 OFF 时,数据将剪裁为列的大小,并且语句执行成功。
being21 2006-08-24
  • 打赏
  • 举报
回复
在这个帖子里得分的两位可一定要回答哦:
呵呵!
http://community.csdn.net/Expert/topic/4973/4973405.xml?temp=.2272913

34,588

社区成员

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

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