По принцип имате решението. Ако сте съхранили количествата и категориите във вашия CTE, можете просто да добавите WHERE
филтър и SUM
агрегиране след това:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Цялата ми заявка изглежда така (която се различава от вашата само в подробностите, които споменах по-горе):
WITH RECURSIVE cte AS (
SELECT
s.sold_name,
s.sold_quantity,
r.child_name,
r.child_quantity,
nc.thing_category as category
FROM
sales s
JOIN relator r
ON s.sold_name = r.parent_name
JOIN names_categories nc
ON r.child_name = nc.thing_name
UNION ALL
SELECT
cte.sold_name,
cte.sold_quantity,
r.child_name,
r.child_quantity,
nc.thing_category
FROM cte
JOIN relator r ON cte.child_name = r.parent_name
JOIN names_categories nc
ON r.child_name = nc.thing_name
)
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Забележка:Не използвах вашия изглед, защото намерих за по-удобно да извличам данните директно от таблиците, вместо да обединявам данни, които вече имам. Но това е начинът, по който лично аз го харесвам :)