En gros tu as la solution. Si vous avez également stocké les quantités et les catégories dans votre CTE, vous pouvez simplement ajouter un WHERE
filter et un SUM
agrégation après :
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Toute ma requête ressemble à ceci (qui ne diffère que des vôtres par les détails que j'ai mentionnés ci-dessus) :
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
Remarque :je n'ai pas utilisé votre vue, car j'ai trouvé plus pratique de récupérer les données directement à partir des tables au lieu de joindre les données que j'ai déjà. Mais c'est comme ça que je l'aime personnellement :)