首页 > 解决方案 > 如何优化下面的sql查询

问题描述

我有一个后端限制,即十进制类型(aban)的结果列的公式中不能有超过 1000 个字符。

如何优化这个查询?

我曾尝试使用 tempTable,但结果不如预期。

aban = 
CASE 
WHEN ( 
    sum(isnull(a.callshandled,0)) + sum(isnull(a.totalcallsaband,0)) + sum(isnull(a.incompletecalls,0)) + sum(isnull(a.returnbusy,0)) + sum(isnull(a.returnring,0)) + sum(isnull(a.icrdefaultrouted,0)) + sum(isnull(a.ndr,0)) + sum(isnull(a.overflowout,0)) + sum(isnull(a.callsrona,0)) + sum(isnull(a.returnrelease,0)) + sum(isnull(a.callsroutednonagent,0)) + sum(isnull(a.shortcalls,0)) + sum(isnull(a.agenterrorcount,0)) + sum(isnull(a.errorcount,0))
  ) 
  = 0 THEN 
  0 
  ELSE (sum(isnull(a.totalcallsaband,0)) * 1.0) / (sum(isnull(a.callshandled,0)) + sum(isnull(a.totalcallsaband,0)) + sum(isnull(a.incompletecalls,0)) + sum(isnull(a.returnbusy,0)) + sum(isnull(a.returnring,0)) + sum(isnull(a.icrdefaultrouted,0)) + sum(isnull(a.networkdefaultrouted,0)) + sum(isnull(a.overflowout,0)) + sum(isnull(a.callsrona,0)) + sum(isnull(a.returnrelease,0)) + sum(isnull(a.callsroutednonagent,0)) + sum(isnull(a.shortcalls,0)) + sum(isnull(a.agenterrorcount,0)) + sum(isnull(a.errorcount,0)))
END 
,

优化查询,使公式中的字符数少于 1000,并且结果列在查询优化前后应具有相同的值。

标签: sqlsql-query-store

解决方案


请尝试这种方式:

DECLARE @dividend int  = 10;
DECLARE @divisor int  = 0;

SELECT COALESCE(@dividend / NULLIF(@divisor,0), 0);

因此可以避免除数的重复计算。


推荐阅读