Hai complicato eccessivamente la tua query, usa semplicemente il gruppo per ottenere i conteggi per gruppi. Aggiornamento:poiché hai le stesse chiavi in entrambe le tabelle 4a e 4b e vuoi riepilogarle in un unico output, hai bisogno di una somma o di un conteggio generale a seconda della sottoquery che usi
select kd_hari, hari, sum(rowcount) as rowcount from
(select a.kd_hari,hari, count(a.kd_hari) as rowcount
from 4a a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P')
group by a.kd_hari,hari
union all
select b.kd_hari,hari, count(b.kd_hari)
from 4b a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P')
group by a.kd_hari,hari) as t
group by kd_hari,hari
In alternativa, combina 4a e 4b con un'unione tutto in una sottoquery e unisci quella sulla tabella tbhari e puoi usare count() con group by sulla sottoquery in questo modo perché la sottoquery includerà tutte le righe di entrambe le tabelle.
Tuttavia, nel modo in cui ho scritto il codice di esempio puoi sfruttare gli indici esistenti mentre unisci le tabelle. Se li combini prima con l'unione e poi esegui il join, non verranno utilizzati indici per il join.