设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2317|回复: 7

巧用表值函数更新数据

[复制链接]
发表于 2019-3-15 11:37:56 | 显示全部楼层 |阅读模式
在手动选择语句执行中,表值函数、临时表和操作查询的运行差异其实并不大。然而在执行存储过程的对比中,经测试,效率高低依次是:表值函数>临时表>操作查询。所以,当数据量较大的时候,建议创建表值函数来处理。
  1. CREATE FUNCTION [dbo].[callData0](@startDate date)
  2. RETURNS @callSummary table(工号 varchar(50), 工作天数 int,总通话次数 int,总通话时长 int,接通数 int)
  3. as begin
  4. declare @firstDay date
  5. set @firstDay=DATEADD(day,1-day(@startDate),@startDate)
  6. delete from  @callSummary
  7. insert into @callSummary
  8. select b.工号,count(distinct b.日期) 工作天数,sum(通话次数) 总通话次数,
  9.         sum(dbo.char2Secs(通话时长)) 总通话时长,sum(接通次数) 接通数
  10.         from tblstaff a , tblWidth b
  11.         where a.客服工号=b.工号  and b.日期 between @firstDay and @startDate
  12.         group by b.工号
  13. RETURN
  14. end
复制代码
在存储过程中调用即可:
  1. CREATE  proc [dbo].[insertShow]
  2. (@startDate date = null)
  3. as begin
  4. if @startDate is null
  5. set @startDate=GETDATE()

  6. declare @sDate date
  7. set @sDate=DATEADD(day,-1,@startDate)

  8. --更新通话数据
  9. update tblshow0 set
  10. tblshow0.工作天数=a.工作天数,tblshow0.总通话次数=a.总通话次数,
  11. tblshow0.总通话时长=a.总通话时长,tblshow0.接通数=a.接通数,
  12. tblshow0.日均时长=case when a.工作天数>0 then round(a.总通话时长/convert(float,a.工作天数),0) else null end,
  13. tblshow0.次均时长=case when a.接通数>0 then round(a.总通话时长/convert(float,a.接通数),0) else null end,
  14. tblshow0.接通率=case when a.接通数>0 then a.接通数/convert(float,a.总通话次数) else null end
  15. from dbo.callData0(dateadd(day,-1,@sDate)) a where tblshow0.工号=a.工号 and tblshow0.日期=@sDate

  16. end
复制代码

点击这里给我发消息

发表于 2019-3-15 11:48:57 来自手机 | 显示全部楼层
roych 发表于 2019-3-15 11:37
在手动选择语句执行中,表值函数、临时表和操作查询的运行差异其实并不大。然而在执行存储过程的对比中,经 ...

不错,赞赞。。
来自: 微社区

点击这里给我发消息

发表于 2019-3-15 11:54:16 来自手机 | 显示全部楼层
zpy2 发表于 2019-3-15 11:48
不错,赞赞。。

数据有多少m,不知道用access,MySQL,sqlite快不快
来自: 微社区

点击这里给我发消息

发表于 2019-3-15 13:07:17 | 显示全部楼层
赞一个,roych 现有有电信的大样品数据,测试这些很方便啊
发表于 2019-3-18 21:54:37 | 显示全部楼层
赞!
回复

使用道具 举报

点击这里给我发消息

发表于 2019-3-20 11:47:33 | 显示全部楼层

赞!
回复

使用道具 举报

点击这里给我发消息

发表于 2020-12-8 16:18:04 | 显示全部楼层
学习
回复

使用道具 举报

发表于 2021-10-11 10:18:39 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-29 09:41 , Processed in 0.102492 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表