Domanda

I need help with a query. I have to find only the leaf nodes from the subcomponent tree represented in the following table (these components that are not made of other components - in the case these are D, E, F):

`CREATE TABLE COMPS
(
COMPONENT VARCHAR(8) NOT NULL,
SUBCOMPONENT VARCHAR(8) NOT NULL,
SUBCOMPCOUNT INTEGER NOT NULL
);
INSERT INTO COMPS VALUES('A', 'B', 2);
INSERT INTO COMPS VALUES('A', 'C', 3);
INSERT INTO COMPS VALUES('B', 'D', 4);
INSERT INTO COMPS VALUES('B', 'E', 2);
INSERT INTO COMPS VALUES('C', 'D', 2);
INSERT INTO COMPS VALUES('C', 'F', 3);
INSERT INTO COMPS VALUES('C', 'B', 2);

 WITH BILLSOFMATERIAL(COMPONENT, SUBCOMPONENT, PARTS_COUNT)
 AS(
 SELECT C.COMPONENT, C.SUBCOMPONENT, C.SUBCOMPCOUNT
 FROM COMPS C
 WHERE C.COMPONENT = 'A'
 UNION ALL
 SELECT B.COMPONENT, C.SUBCOMPONENT, B.PARTS_COUNT * C.SUBCOMPCOUNT
 FROM BILLSOFMATERIAL B, COMPS C
 WHERE B.SUBCOMPONENT = C.COMPONENT
 )
 SELECT COMPONENT, SUBCOMPONENT, SUM(PARTS_COUNT) AS "TOTAL QUANTITY"
 FROM BILLSOFMATERIAL
 GROUP BY COMPONENT, SUBCOMPONENT
 ORDER BY COMPONENT, SUBCOMPONENT;`

Thank you in advance.

È stato utile?

Soluzione

The simplest filter for this will be to include this WHERE clause:

;WITH BILLSOFMATERIAL(COMPONENT, SUBCOMPONENT, PARTS_COUNT)
 AS(
 SELECT C.COMPONENT, C.SUBCOMPONENT, C.SUBCOMPCOUNT
 FROM COMPS C
 WHERE C.COMPONENT = 'A'
 UNION ALL
 SELECT B.COMPONENT, C.SUBCOMPONENT, B.PARTS_COUNT * C.SUBCOMPCOUNT
 FROM BILLSOFMATERIAL B, COMPS C
 WHERE B.SUBCOMPONENT = C.COMPONENT
 )
 SELECT COMPONENT, SUBCOMPONENT, SUM(PARTS_COUNT) AS "TOTAL QUANTITY"
 FROM BILLSOFMATERIAL
 WHERE SUBCOMPONENT NOT IN (SELECT COMPONENT FROM COMPS)
 GROUP BY COMPONENT, SUBCOMPONENT
 ORDER BY COMPONENT, SUBCOMPONENT;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top