Im Grunde haben Sie die Lösung. Wenn Sie die Mengen und Kategorien auch in Ihrem CTE hinterlegt haben, können Sie einfach ein WHERE
hinzufügen Filter und eine SUM
Aggregation danach:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Meine gesamte Abfrage sieht so aus (die sich nur in den oben genannten Details von Ihrer unterscheidet):
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
Hinweis:Ich habe Ihre Ansicht nicht verwendet, weil ich es praktischer fand, die Daten direkt aus den Tabellen abzurufen, anstatt bereits vorhandene Daten zusammenzuführen. Aber so mag ich es persönlich :)