我一直在APEX的“统计信息”页面上工作,目前有以下报告查询:
select to_char(DATELOGGED,'Month - YYYY') as Month,
COUNT(*) as "Total Calls",
SUM(case when CLOSED is null then 1 else null end) as "Open",
COUNT(case CLOSED when 'Y' then 1 else null end) as "Closed",
SUM(case when EXTREF is null then 0 else 1 end) as "Referred",
round((COUNT(case SLA_MET when 'Y' then 1 else null end)/COUNT(case CLOSED when 'Y' then 1 else null end)*100),2) as "SLA Met %"
from IT_SUPPORT_CALLS
GROUP BY to_char(DATELOGGED,'Month - YYYY')
order by MIN (DATELOGGED) desc
我希望从另一个表中添加DURATION的总和:
select
"START_TIME",
DECODE(DURATION,null,'Open',((select extract( minute from DURATION )
+ extract( hour from DURATION ) * 60
+ extract( day from DURATION ) * 60 * 24
from dual)||' minutes')) DURATION
from "IT_DOWNTIME"
IT_DOWNTIME表使用START_TIME(varchar2)作为日期标识符,IT_SUPPORT_CALLS使用DATELOGGED(DATE)作为日期标识符。
例如,IT_DOWNTIME的当前输出为:
08-FEB-2019-30分钟
20-FEB-2019-15分钟
我想要报告SUM并分组IT_DOWNTIME并将其添加到现有报告中。
希望这很有道理。
请让我知道是否错过任何有助于解决此问题的信息。
非常感谢
非常感谢。不幸的是,它没有从IT_DOWNTIME返回任何数据。 我猜想不同的日期格式无济于事,希望这可以使事情更简单:
以下是IT_DOWNTIME中值得关注的列: START_TIME(VARCHAR2(30)) 持续时间(间隔天(2)至第二(6))
当前未格式化的IT_DOWNTIME输出示例:
START_TIME
2016年6月6日11:05
DURATION
+00 00:35:00.000000
当前IT_SUPPORT_CALLS输出而不进行格式化的示例:
已记录日期
2016年6月7日
答案 0 :(得分:0)
类似的事情也许可以做到,但是对于您的列名等却有些猜测:
SELECT *
FROM
(
SELECT
to_char(DATELOGGED,'MON-YYYY') as Month,
COUNT(*) as Total_Calls,
SUM(case when CLOSED is null then 1 else null end) as case_Open,
COUNT(case CLOSED when 'Y' then 1 else null end) as case_Closed,
SUM(case when EXTREF is null then 0 else 1 end) as case_Referred,
round((COUNT(case SLA_MET when 'Y' then 1 else null end)/COUNT(case CLOSED when 'Y' then 1 else null end)*100),2) as percent_SLA_met
FROM IT_SUPPORT_CALLS
GROUP BY to_char(DATELOGGED,'MON-YYYY')
) calls
LEFT JOIN
(
SELECT
SUBSTR(START_TIME, 4) as down_month,
SUM(extract(minute from DURATION) +
extract(hour from DURATION) * 60 +
extract(day from DURATION) * 60 * 24
) || 'minutes' as total_down_mins
FROM IT_DOWNTIME
WHERE duration is not null
GROUP BY SUBSTR(START_TIME, 4)
) downs
ON calls.month = downs.down_month
将第一个查询的日期格式更改为MON-YYYY,以使其与您声称的第二个查询的varchar2日期格式(dd-mon-yyy)保持一致,并对日期加上字符串以删除一天,只剩下一个月
编辑:
好的,所以既然您从IT_DOWNTIME发布了一些不同的示例数据,我看到了问题:日期上也有一个时间。您的第一个样本数据这次不包含此时间,它只是一个日期(作为字符串),所以我正在做...
SUBSTR('01-JAN-1970', 4)
...将日期减少为一个月日期('JAN-1970'),这是为了与另一张表(to_date()中发生的事情,格式为'non-yyyy'一致) )
现在我们知道那里也有一个时间,当然它不会对齐,因为...
SUBSTR('01-JAN-1970 12:34', 4)
...产生“ JAN-1970 12:34”,然后它将与其他表中的任何内容都不匹配(没有时间的情况下仅为“ JAN-1970”),因此左联接表示空值将输出
解决方案是更改SUBSTR调用,以便从第4位开始削减8个字符:
SUBSTR(start_time, 4, 8)
这将删除日期和时间,只剩下我们需要的月份。您需要在上面的查询中的两个位置进行更改。
答案 1 :(得分:0)
对于延迟回复表示歉意。但是,这很正常,Caius,非常感谢!为了完整起见,必须将您上面的代码更改为:
SUBSTR(START_TIME, 4, 8) as down_month,
和
GROUP BY SUBSTR(START_TIME, 4, 8)