> наверное для точности - having, но всё-авно пока не придумал как :(
Всё равно не совсем понятно, но попробуй так :
а) введи вычислимое поле 'уровень дерева' (lvl)
как это сделать - много раз обсуждалось
б) добавь
having sum(case lvl when 0 then quantity else 0 end)
<> sum(case lvl when 2 then quantity else 0 end)
Оно ?
Кстати - select from select тут не нужен, проще написать
for
with recursive
Recursion as (
select m0.type_id ti, d0.id ci, d0.quantity q, 0 lvl
from vw_det0 d0 join vw_DOC0 m0
on m0.id = d0.doc_id
and d0.card_id = -1
and d0.tovar_id = :tov_id
UNION ALL
select m1.type_id ti, d1.id ci, d1.quantity q, r.lvl + 1
from vw_det0 d1 join vw_DOC0 m1
on m1.id = d1.doc_id
join Recursion r
on r.ci = d1.card_id
) ,
Sums as (
select ti, sum(q) as tmp
from Recursion
group by ti
having sum(case lvl when 0 then q else 0 end)
<> sum(case lvl when 2 then q else 0 end)
)
select ti, tmp from Sums
into :ti, :tmp do
--
Хорсун Влад