В вашем варианте нужно осторожнее с union быть, он выкидывает дубли, т.е. если все три запроса вернут например число 5, то результат вычисления вместо 15 будет 5. Чтобы оставить дубли, нужно использовать union all.
Если прямо в лоб решать вашу задачу, то можно так попробовать:
SELECT [type], count(1) AS cnt FROM (
SELECT [type] FROM tab1 AS t1 WHERE t1.date between '2020-01-01' AND '2020-08-15'
UNION ALL
SELECT [type] FROM tab2 AS t2 WHERE t2.date between '2020-01-01' AND '2020-08-15'
UNION ALL
SELECT [type] FROM tab3 AS t3 WHERE t3.date between '2020-01-01' AND '2020-08-15'
) AS t
group by [type]
Но если в таблицах много записей, то это может долго работать.