यह @a_horse's सही का सरलीकृत संस्करण है उत्तर
(टिप्पणियों में ओपी के साथ चर्चा के बाद)।
किसी भी के साथ काम करता है (यथोचित परिमित) रिकर्सन में स्तरों की संख्या।
दिए गए project_id
. के लिए कुल मूल्य
WITH RECURSIVE cte AS (
SELECT project_id AS project_parent, project_value
FROM projects
WHERE project_id = 1 -- enter id of the base project here !
UNION ALL
SELECT p.project_id, p.project_value
FROM cte
JOIN projects p USING (project_parent)
)
SELECT sum(project_value) AS total_value
FROM cte;
सभी परियोजनाओं के लिए कुल मूल्य
WITH RECURSIVE cte AS (
SELECT project_id, project_id AS project_parent, project_value
FROM projects
WHERE project_parent IS NULL -- all base projects
UNION ALL
SELECT c.project_id, p.project_id, p.project_value
FROM cte c
JOIN projects p USING (project_parent)
)
SELECT project_id, sum(project_value) AS total_value
FROM cte
GROUP BY 1
ORDER BY 1;
db<>fiddle यहां
(सही परीक्षण मामले के साथ)
पुराना sqlfiddle
उप>