Первое что бросается в глаза - в селекте фигурируют поля, которые не участвуют ни в агрегации ни в группировке
select
pr.pid,
null as cid,
pr.rcid as par_cid,
pr.pname as name,
sum(case when incoming = '1' then rec.quantity end) incoming,
sum(case when incoming = '0' then rec.quantity end) outcoming,
sum(case when incoming = '1' then 1 else -1 end * rec.quantity) balance
from
products pr
inner join records rec on rec.rpid=pr.pid
group by
pr.pid,
pr.rcid,
pr.pname
Так что стоит начать с первого селекта в with,
потом его же с union
и потом уже дальше