Skomplikowałeś swoje zapytanie, po prostu użyj grupy według, aby uzyskać obliczenia według grup. Aktualizacja:ponieważ masz te same klucze w obu tabelach 4a i 4b i chcesz je podsumować w jednym wyniku, potrzebujesz nadrzędnej sumy lub liczby w zależności od użytego podzapytania
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
Alternatywnie, połącz 4a i 4b z unią wszystko w podzapytaniu i dołącz do tego w tabeli tbhari i możesz w ten sposób użyć count() z group by w podzapytaniu, ponieważ podzapytanie będzie zawierało wszystkie wiersze z obu tabel.
Jednak sposób, w jaki napisałem przykładowy kod, pozwala skorzystać z istniejących indeksów podczas dołączania do tabel. Jeśli połączysz je najpierw z unionem, a następnie wykonasz łączenie, to żadne indeksy nie będą używane do łączenia.