SQL报表-查询多个表
我一直在APEX的统计页面上工作,目前有以下报告查询:SQL报表-查询多个表,sql,oracle,apex,Sql,Oracle,Apex,我一直在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 E
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
我想从另一个表中添加持续时间的总和:
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_调用使用DATELOGGED date作为日期标识符
IT_停机时间的当前输出为:
2019年2月8日-30分钟
2019年2月20日-15分钟
我希望报告汇总和分组,并将其添加到现有报告中
希望这是有意义的
如果我遗漏了任何有助于解决此问题的信息,请告诉我
非常感谢
谢谢你,非常感谢。不幸的是,它在停机时不会返回任何数据。
我猜不同的日期格式没有帮助,希望这能澄清一些问题:
以下是IT_停机时间中感兴趣的列:
开始时间VARCHAR230
持续时间间隔第2天至第6秒
当前未格式化的IT_停机输出示例:
开始时间
2016年7月6日11:05
持续时间
+00:35:00.000000
当前IT_支持_调用无格式输出的示例:
日期记录
2016年7月6日
像这样的东西可能会做到,但对于您的列名等,有一些猜测:
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,以使其与您声称的第二个查询dd MON yyy的varchar2日期格式一致,并将日期子字符串化以删除日期,只保留月份
编辑:
好的,既然你发布了一些不同的例子数据,我发现了问题:日期上也有时间。您的第一个示例数据这次没有包含,它只是一个字符串形式的日期,所以我正在做
SUBSTR('01-JAN-1970', 4)
…将日日期减少为月日期“1970年1月”,目的是与另一个表中的日期保持一致,格式为“非yyyy”
现在我们知道这里也有一段时间,当然它不会对齐,因为
SUBSTR('01-JAN-1970 12:34', 4)
…生成'JAN-1970 12:34',这将与另一个表中的任何内容都不匹配,该表仅为'JAN-1970',没有时间,因此左连接意味着将输出空值
解决方案是更改SUBSTR调用,使其从位置4开始剪切8个字符:
SUBSTR(start_time, 4, 8)
这将删除日期和时间,只留下我们需要的月份和年份。您需要在上述查询的两个位置进行更改。对于延迟回复此问题,深表歉意。然而,这是完美的工作凯乌斯,非常感谢!因此,为了完整,必须将上述代码更改为:
SUBSTR(START_TIME, 4, 8) as down_month,
及
请发布一些示例数据和所需结果,以澄清您需要的格式化文本,请说明什么数据类型是持续时间?停机时间表使用开始时间varchar2-这让我很难过。Oracle确实有日期数据类型..:/例如,IT的当前输出:-您发布的查询只选择了一列,因此无法生成您声称的输出,请解决此问题。@Caius Jard SQL不是我们的面包和黄油,只是我们在一旁做的事情。这些桌子自从15年前被匆忙摆放以来,从未被刷新过。谢谢你。不幸的是,它在停机时不会返回任何数据。将在IT_DOWNTIME表上进行扩展以使其更有意义,当前编辑的文本基于您所说的IT_DOWNTIME已包含的数据分组查询似乎不太可能不返回任何数据-请参见此示例,它使用您发布的确切数据,如您所料返回45分钟,链接:我编辑了我的原始帖子,希望能把事情弄清楚一点
GROUP BY SUBSTR(START_TIME, 4, 8)