In principe heb je de oplossing. Als u de hoeveelheden en categorieën ook in uw CTE heeft opgeslagen, kunt u eenvoudig een WHERE
. toevoegen filter en een SUM
aggregatie achteraf:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Mijn hele vraag ziet er als volgt uit (die alleen verschilt in de details die ik hierboven heb genoemd van de jouwe):
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
Opmerking:ik heb uw weergave niet gebruikt, omdat ik het handiger vond om de gegevens rechtstreeks uit de tabellen op te halen in plaats van gegevens die ik al heb samen te voegen. Maar dat is precies hoe ik het persoonlijk leuk vind :)