I grund och botten har du lösningen. Om du också lagrade kvantiteterna och kategorierna i din CTE kan du helt enkelt lägga till en WHERE
filter och en SUM
aggregering efteråt:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Hela min fråga ser ut så här (som bara skiljer sig i detaljerna jag nämnde ovan från din):
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
Obs:Jag använde inte din vy, eftersom jag tyckte att det var mer praktiskt att hämta data direkt från tabellerna istället för att sammanfoga data som jag redan har. Men det är precis så jag personligen gillar det :)