Du har overkompliceret din forespørgsel, brug bare gruppe efter for at få optællingerne efter grupper. Opdatering:da du har de samme nøgler i både 4a- og 4b-tabeller, og du vil opsummere dem i ét output, har du brug for en overordnet sum eller optælling afhængigt af den underforespørgsel, du bruger
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
Alternativt kan du kombinere 4a og 4b med en union alt sammen i en underforespørgsel og slutte sig til den på tbhari-tabellen, og du kan bruge count() med group by på underforespørgslen på den måde, fordi underforespørgslen vil inkludere alle rækker fra begge tabeller.
Men den måde, jeg skrev eksempelkoden på, kan du drage fordel af de eksisterende indekser, mens du slutter dig til tabellerne. Hvis du først kombinerer dem med union og derefter gør joinforbindelsen, vil der ikke blive brugt nogen indekser for joinforbindelsen.