>WITH Parts >(id,recipeid,quan,itemid,itemisrecipe,portion,_level) AS >( >-- Anchor >SELECT > id,recipeid,quan,itemid, > itemisrecipe,portion,0 as _level > FROM TestR > WHERE (recipeid = 23) >UNION ALL >-- Recursive >SELECT > r.id,r.recipeid,r.quan,r.itemid, > r.itemisrecipe,r.portion,_level + 1 >FROM TestR r > INNER JOIN Parts p ON p.itemid = r.recipeid and p.itemisrecipe=1 >) >select id,recipeid,quan,itemid,itemisrecipe,portion,_level from partsYour query just returns the 'nesting level'. I need to accumulate the total weights for each part (or ingredient). The query (below) that I posted to Sergey does that where the 'quan' field value specifies a multiple (or fraction) of a sub-recipe - which is the case when the 'portion' field is true.
WITH Parts AS ( -- Anchor SELECT id, recipeid, quan, itemid, itemisrecipe FROM TestR WHERE (recipeid = 23) UNION ALL -- Recursive SELECT r.id, r.recipeid, CAST(r.quan * p.quan AS numeric(7, 2)) AS quan, r.itemid, r.itemisrecipe FROM TestR r INNER JOIN Parts p ON p.itemid = r.recipeid WHERE (p.itemisrecipe = 1) ) SELECT SUM(quan) quan, itemid,itemisrecipe FROM Parts AS p2 WHERE itemisrecipe=0 GROUP BY itemid,itemisrecipe