Прекалено сте усложнили заявката си, просто използвайте group by, за да получите броя по групи. Актуализация:тъй като имате едни и същи ключове в таблици 4a и 4b и искате да ги обобщите в един изход, имате нужда от обща сума или брой в зависимост от подзаявката, която използвате
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
Като алтернатива, комбинирайте 4a и 4b с обединение всичко в подзаявка и я присъединете към таблицата tbhari и можете да използвате count() с group by в подзаявката по този начин, защото подзаявката ще включва всички редове от двете таблици.
Но по начина, по който написах примерния код, можете да се възползвате от съществуващите индекси, докато се присъединявате към таблиците. Ако ги комбинирате първо с обединение и след това направите съединяването, тогава няма да се използват индекси за обединяването.