首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-12-19 
多表联表查询优化想对此SQL进行优化,T-SQL如下:select NEWID(),SBI.StaffCode--座席编号,SBI.StaffName--

多表联表查询优化
想对此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

[解决办法]
尽量把这些转换操作放在等号的邮编

热点排行