pl / sql:函数

时间:2012-09-04 12:54:39

标签: oracle function plsql

我在excel表中有三列值

  A: # of unsuccessful transfers to CCR  (CTI) =11986
  B: # of calls NOT wrapped =8585
  C: # of wrapped calls= 15283

并且三列的总数是来电号码(CTI)= 37017(这是包裹的电话数量+到CCR(CTI)的不成功转账数量+未包裹的电话数量的总和)

我还计算了#ccount of unaccounted calls(这是包装调用的数量 - 不成功转移到CCR(CTI)的数量 - 未被包裹的呼叫数量)

所以我的#caccount = 1163

现在我必须找出不计数电话的百分比,所以我除了37017/1163

所以我的百分比是3%,理想情况下应该是0%,我怎样才能在甲骨文中发现A,B或C中百分之三的百分比。

1 个答案:

答案 0 :(得分:0)

  

A B C来自数据库qry,源代码相同但是很多   A B和C

的每个qry的不同过滤器

这可能允许您在行中找到任何A,B或C未被捕获的模式,但您仍然需要确定每个查询中的哪一个行(或行的模式)已被拾取,以及为什么错过它们。

由于带有其他过滤器的三个查询的计数总和低于没有这些过滤器的查询的计数,因此您似乎在过滤器本身中存在差距。如果我不得不猜测,那么我首先看到的是null值的错误处理,试图将它们等同于(since null is neither equal or not equal to anything, even itself)。但这显然是猜测,没有看到过滤器并且知道哪些列可以为空也不是很有帮助。

您可以使用minus隔离未显示的1163行,以查找“' total'查询,不包括任何产生A,B和C的人;类似的东西:

select *
from xx_new.xx_cti_call_details@appsread.prd.com
where dealer_name = 'XYG'
and TRUNC(CREATION_DATE) BETWEEN '01-JUL-2012' AND '31-JUL-2012'
minus
select *
from xx_new.xx_cti_call_details@appsread.prd.com
where dealer_name = 'XYG'
and TRUNC(CREATION_DATE) BETWEEN '01-JUL-2012' AND '31-JUL-2012'
and <additional filters for A>
minus
select *
from xx_new.xx_cti_call_details@appsread.prd.com
where dealer_name = 'XYG'
and TRUNC(CREATION_DATE) BETWEEN '01-JUL-2012' AND '31-JUL-2012'
and <additional filters for B>
minus
select *
from xx_new.xx_cti_call_details@appsread.prd.com
where dealer_name = 'XYG'
and TRUNC(CREATION_DATE) BETWEEN '01-JUL-2012' AND '31-JUL-2012'
and <additional filters for C>

我很高兴您在初始查询中有distinct,因为它表明您正在计算切换呼叫是由呼叫本身而不是呼叫本身。这也可能意味着计数不应该加起来 - 尽管在这种情况下我可能期望A + B + C比简单更大,因为可能存在重叠 - select *可能实际上返回超过1163行;在这种情况下,您可能只想选择您认为可能存在问题的列。

顺便提一下,如果creation_date被编入索引,那么使用where creation_date >= date '2012-07-01' and creation_date < date '2012-08-01'可能会获得更好的效果,因为trunk()函数会阻止使用索引。可能不是你的问题。