Básicamente tienes la solución. Si también almacenó las cantidades y categorías en su CTE, simplemente puede agregar un WHERE
filtro y un SUM
agregación después:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Toda mi consulta se ve así (que solo difiere de la suya en los detalles que mencioné anteriormente):
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
Nota:no utilicé su vista, porque me resultó más útil obtener los datos directamente de las tablas en lugar de unir los datos que ya tengo. Pero así es como a mí personalmente me gusta :)