Você complicou demais sua consulta, basta usar group by para obter as contagens por grupos. Atualização:como você tem as mesmas chaves nas tabelas 4a e 4b e deseja resumi-las em uma saída, você precisa de uma soma ou contagem abrangente, dependendo da subconsulta usada
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
Alternativamente, combine 4a e 4b com uma união all em uma subconsulta e junte isso na tabela tbhari e você pode usar count() com group by na subconsulta dessa maneira porque a subconsulta incluirá todas as linhas de ambas as tabelas.
No entanto, da maneira como escrevi o código de exemplo, você pode aproveitar os índices existentes ao unir as tabelas. Se você combiná-los primeiro com união e depois fizer a junção, nenhum índice será usado para a junção.