В DB2 SQL у меня есть таблица, которая содержит 3 столбца: parent_id
, id
и count
.Это иерархическая таблица.Мне нужен рекурсивный запрос, чтобы получить все конечные узлы и их общее количество, и другой запрос, чтобы получить все конечные узлы и их общее количество плюс стоимость каждого узла (цена хранится в другой таблице (id
, price
))
Я пробовал этот запрос, но он не работал:
with COMP_P (COMPONENT,SUBCOMPONENT,SUBCOMPCOUNT) as (
(select C.COMPONENT,C.SUBCOMPONENT,C.SUBCOMPCOUNT from COMPS C WHERE C.COMPONENT = 'A')
UNION ALL
(SELECT P.COMPONENT,C.SUBCOMPONENT,C.SUBCOMPCOUNT * P.SUBCOMPCOUNT from COMPS C,COMP_P P WHERE P.SUBCOMPONENT = C.COMPONENT ))
SELECT COMPONENT,SUBCOMPONENT,sum(SUBCOMPCOUNT) As Count FROM COMP_P group by COMPONENT,SUBCOMPONENT ;
Это дает мне листовые узлы и другие.Я попробовал это для второй части:
with COMP_P (COMPONENT,SUBCOMPONENT,SUBCOMPCOUNT) as (
(select C.COMPONENT,C.SUBCOMPONENT,C.SUBCOMPCOUNT from COMPS C WHERE C.COMPONENT = 'A')
UNION ALL
(SELECT P.COMPONENT,C.SUBCOMPONENT,C.SUBCOMPCOUNT * P.SUBCOMPCOUNT from COMPS C,COMP_P P WHERE P.SUBCOMPONENT = C.COMPONENT ))
SELECT COMPONENT,SUBCOMPONENT,sum(SUBCOMPCOUNT) As Count,sum(SUBCOMPCOUNT) * partcosts.cost FROM COMP_P,partcosts where partcosts.partid.id=COMP_P.SUBCOMPONENT group by COMPONENT,SUBCOMPONENT ;