मूल रूप से आपके पास समाधान है। यदि आपने मात्राओं और श्रेणियों को अपने सीटीई में भी संग्रहीत किया है, तो आप बस एक WHERE
जोड़ सकते हैं फ़िल्टर और एक SUM
बाद में एकत्रीकरण:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
मेरी पूरी क्वेरी इस तरह दिखती है (जो केवल आपके द्वारा ऊपर बताए गए विवरण में भिन्न है):
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
नोट:मैंने आपके विचार का उपयोग नहीं किया, क्योंकि मेरे पास पहले से मौजूद डेटा में शामिल होने के बजाय डेटा को सीधे तालिकाओं से प्राप्त करना अधिक आसान लगता है। लेकिन यह वही तरीका है जो मुझे व्यक्तिगत रूप से पसंद है :)