如何基于计算对plsql中的数据进行分组并从中绘制图表?

如何基于计算对plsql中的数据进行分组并从中绘制图表?,sql,oracle,charts,plsql,oracle-apex,Sql,Oracle,Charts,Plsql,Oracle Apex,我有一张表,其结构如下 task_id(pk) task_title(varchar2) task_due_date(date) 现在我想根据以下条件绘制一张图表 没有到期日的任务数。 一周内到期的任务数。 一周内到期但不足四周的任务数 到期时间超过四周的任务数 未到期的任务数。 我试着按条件分组,如下所示 select (select count(TASK_ID) from rev$ta_task where (task_due_date >sysdate)) as notDue, (

我有一张表,其结构如下

task_id(pk)
task_title(varchar2)
task_due_date(date)
现在我想根据以下条件绘制一张图表

没有到期日的任务数。 一周内到期的任务数。 一周内到期但不足四周的任务数 到期时间超过四周的任务数 未到期的任务数。 我试着按条件分组,如下所示

select (select count(TASK_ID) from rev$ta_task where (task_due_date >sysdate)) as notDue,
(select count(TASK_ID) from task where (task_due_date <sysdate)) as DuedMoreThan4Week,
(select count(TASK_ID) from task  where (task_due_date +7<sysdate)) as DuedOneWeek,
(select count(TASK_ID) from task  where (task_due_date +7<sysdate) and (task_due_date +30<sysdate)) as DuedFourWeek,
(select count(TASK_ID) from task  where (task_due_date is null)) as noDueDate
 from dual
但要从中绘制图表,我们需要在单列而不是多列中使用上述所有值,那么我如何才能实现它呢?有没有更好的解决办法?由于我是PLSQL新手,所以我尽力编写更好的查询

注意:我使用的是Oracle11g,将使用上面的查询在中绘制图表 甲骨文顶点

你可以试着建立一个联盟来实现它

select 'NOTDUE' name,count(TASK_ID) cnt from task where (task_due_date >sysdate) 
 UNION ALL
 select 'DUEDMORETHAN4WEEK',count(TASK_ID) from task where (task_due_date <sysdate)
 UNION ALL
 select 'DUEDONEWEEK',count(TASK_ID) from task where (task_due_date +7<sysdate)
 UNION ALL  
 select 'DUEDFOURWEEK',count(TASK_ID) from task where (task_due_date +7<sysdate) and (task_due_date +30<sysdate)
 UNION ALL
 select 'NODUEDATE',count(TASK_ID) from task where (task_due_date is null)

您好@D-Shih,谢谢您的回复,从您的查询中,我得到了5个不同的列,但我希望所有数据都在一个列中,以便我可以根据它绘制图表。可能吗?您好@D-Shih,非常感谢,联合查询解决了我的问题,非常感谢您的帮助。@Ekaz没问题,很高兴为您提供帮助。我在问题中没有看到任何PL/SQL。
select 'NOTDUE' name,count(TASK_ID) cnt from task where (task_due_date >sysdate) 
 UNION ALL
 select 'DUEDMORETHAN4WEEK',count(TASK_ID) from task where (task_due_date <sysdate)
 UNION ALL
 select 'DUEDONEWEEK',count(TASK_ID) from task where (task_due_date +7<sysdate)
 UNION ALL  
 select 'DUEDFOURWEEK',count(TASK_ID) from task where (task_due_date +7<sysdate) and (task_due_date +30<sysdate)
 UNION ALL
 select 'NODUEDATE',count(TASK_ID) from task where (task_due_date is null)