欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

多表联表查询优化解决思路

更新时间: 2014-01-05 02:18:21 责任编辑: Author_N1

 

多表联表查询优化
想对此SQL进行优化,T-SQL如下:

select NEWID()
,SBI.StaffCode --座席编号
,SBI.StaffName --座席姓名
,tas.AmtSor*@SreOfTra --话务数量
,aqt.ActualScore * @SreOfQua --话务质量
,sp.PecScr * @SreOfPer --员工表现
,(tas.AmtSor * @SreOfTra + aqt.ActualScore * @SreOfQua + sp.PecScr * @SreOfPer) --汇总后总分
,convert(varchar(7),@MonthDate,20)
,GETDATE()
,@GroupNo
,(CASE WHEN (tas.AmtSor * @SreOfTra + aqt.ActualScore * @SreOfQua + sp.PecScr * @SreOfPer) >= @SceOfPas THEN '是' ELSE '否' END)
from (select * from StaffBaseInfo where AgtGrpCode = @GroupNo) SBI 
left join (select StaffCode, ActualScore from AgtQuaTimes where QuaDate = convert(varchar(7),@MonthDate,20)) aqt 
on SBI.StaffCode = aqt.StaffCode and (select AgtGrpCode from StaffBaseInfo sbi where sbi.StaffCode = aqt.StaffCode) = @GroupNo
left join (select StaffCode, AmtSor from TraAmtScore where TraDate= convert(varchar(7),@MonthDate,20)) tas 
on SBI.StaffCode = tas.StaffCode and AgtGrpCode = @GroupNo
left join (select AgtCode, PecScr from StaffPec where convert(varchar(7),PecDate,20) = convert(varchar(7),@MonthDate,20)) sp 
on SBI.DKCode = sp.AgtCode and AgtGrpCode = @GroupNo

子查询中有一个共同点就是,它们的where条件相同。所以想知道如何再对此SQL进行优化
--参考方法--
把你的代码稍微给简化了一下:

select NEWID()
,SBI.StaffCode --座席编号
,SBI.StaffName --座席姓名
,tas.AmtSor*@SreOfTra --话务数量
,aqt.ActualScore * @SreOfQua --话务质量
,sp.PecScr * @SreOfPer --员工表现
,(tas.AmtSor * @SreOfTra + aqt.ActualScore * @SreOfQua + sp.PecScr * @SreOfPer) --汇总后总分
,convert(varchar(7),@MonthDate,20)
,GETDATE()
,@GroupNo
,(CASE WHEN (tas.AmtSor * @SreOfTra + aqt.ActualScore * @SreOfQua + sp.PecScr * @SreOfPer) >= @SceOfPas THEN '是' ELSE '否' END)
from StaffBaseInfo  SBI 

left join AgtQuaTimes aqt 
       on QuaDate = convert(varchar(7),@MonthDate,20) 
      and SBI.StaffCode = aqt.StaffCode 
  --and AgtGrpCode = @GroupNo

left join TraAmtScore tas
       on TraDate= convert(varchar(7),@MonthDate,20) 
  and SBI.StaffCode = tas.StaffCode 
  --and AgtGrpCode = @GroupNo

left join StaffPec  sp 
       on convert(varchar(7),PecDate,20) = convert(varchar(7),@MonthDate,20))
  and SBI.DKCode = sp.AgtCode 

where sbi.AgtGrpCode = @GroupNo

--参考方法--
尽量把这些转换操作放在等号的邮编
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:21
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8294/
本文WWW.DOC100.NET DOC100.NET版权所有。