Về cơ bản, bạn có giải pháp. Nếu bạn cũng đã lưu trữ số lượng và danh mục trong CTE của mình, bạn chỉ cần thêm WHERE
bộ lọc và một SUM
tổng hợp sau đó:
SELECT
child_name,
SUM(sold_quantity * child_quantity)
FROM cte
WHERE category = 'component'
GROUP BY child_name
Toàn bộ truy vấn của tôi trông như thế này (chỉ khác ở những chi tiết tôi đã đề cập ở trên với của bạn):
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
Lưu ý:Tôi không sử dụng chế độ xem của bạn, vì tôi thấy việc tìm nạp dữ liệu trực tiếp từ các bảng sẽ tiện dụng hơn thay vì kết hợp dữ liệu mà tôi đã có. Nhưng đó chỉ là cách cá nhân tôi thích nó :)