Предполагая, что вы рады видеть эти сводки по всей странице, самый простой способ сделать это будет:
select sum(DECODE(STATUS_CD, 0,1, 0)) Status_A,
sum(DECODE(STATUS_CD, 1,1, 0)) Status_B,
sum(DECODE(STATUS_CD, 2,1, 3,1, 0)) Status_C_D,
sum(DECODE(STATUS_CD, 2,1, 0)) Status_C,
sum(DECODE(STATUS_CD, 3,1, 0)) Status_D,
sum(DECODE(STATUS_CD, 4,1, 0)) Status_E
FROM table_a ...
РЕДАКТИРОВАТЬ: Если вам нужно увидеть результаты вниз по странице, попробуйте:*
select "status",
SUM(decode(trunc(((sysdate - "date_time") +8) / 8), 1, 1, 0)) "0-7",
SUM(decode(trunc(((sysdate - "date_time") +8) / 8), 2, 1, 0)) "8-15",
SUM(decode(trunc(((sysdate - "date_time") +8) / 8), 3, 1, 0)) "16-23",
SUM(decode(trunc(((sysdate - "date_time") +9) / 8), 4, 1, 0)) "24-30",
SUM(decode(trunc(((sysdate - "date_time") -1) / 30), 1, 1, 0)) "31-60",
SUM(decode(trunc(((sysdate - "date_time") -1) / 30), 2, 1, 0)) "61-90",
SUM(decode(trunc(((sysdate - "date_time") -1) / 30), 3, 1, 0)) "91-120",
SUM(decode(trunc(((sysdate - "date_time") -1) / 60), 2, 1, 0)) "121-180",
SUM(decode(trunc(((sysdate - "date_time")) / 181), 0, 0, 1)) ">180"
from
(SELECT DECODE(coalesce(d.dummy_status, a.STATUS_CD),
'X', 'Status_C_D'
'0', 'Status_A',
'1', 'Status_B',
'2', 'Status_C',
'3', 'Status_D',
'4', 'Status_E',
'Unknown') "status",
a."date_time"
FROM table_a a
LEFT JOIN (select '2' status_cd, '2' dummy_status from dual union
select '2' status_cd, 'X' dummy_status from dual union
select '3' status_cd, '3' dummy_status from dual union
select '3' status_cd, 'X' dummy_status from dual) d
ON a.status_cd = d.status_cd
...
) group by "status"