Hi experts,
I'm back again with my hierarchical exploration query and issues.
Here are some sample data:
Table of Equipements (EQKT)
EQUNR | EQKTX |
000000005002318484 | G09 - ARM.STEEL.1 |
000000005002468256 | PF - EXLIM P360-GH - Ph : 0 |
Table Equipements and Objects association (INOB)
OBJEK | CUOBJ |
000000005002318484 | 000000000002944088 |
000000005002468256 | 000000000003125606 |
Table Objects and Classes association (KSSK)
As you can see, table KSSK stores data in a hierarchical way.
OBJEK | CLINT |
000000000002944088 | 0000006420 |
0000006420 | 0000000737 |
0000000737 | 0000000693 |
000000000003125606 | 0000002368 |
0000002368 | 0000000947 |
0000000947 | 0000000944 |
Joins between tables are done in the following way:
EQUI and INOB are joined on equnr = objek
INOB and KSSK are joined on objek = cuobj
KSSK hierarchical relationship between child and parent row is done on objek = clint
From this, I've written the following query :
WITH
equipments_tree AS
(
SELECT eq.equnr, eq.eqktx, i.cuobj
FROM sapsr3.eqkt eq
INNER JOIN sapsr3.inob i ON i.objek = eq.equnr
WHERE equnr IN ('000000005002318484','000000005002468256')
),
class_hierarchy AS
(
SELECT ks.klart, ks.clint, et.cuobj
FROM sapsr3.kssk ks
INNER JOIN equipments_tree et ON ks.objek = et.cuobj
START WITH ks.objek = et.cuobj CONNECT BY PRIOR ks.clint = ks.objek
)
SELECT * FROM equipments_tree et, class_hierarchy ch
WHERE et.cuobj = ch.cuobj
But the problem is as a result I'm getting only first level class for each equipment as shown below:
EQUNR | EQKTX | CUOBJ | CLINT |
000000005002318484 | G09 - ARM.STEEL.1 | 000000000002944088 | 0000006420 |
000000005002468256 | PF - EXLIM P360-GH - Ph : 0 | 000000000003125606 | 0000002368 |
While expected correct result should be:
As you can see in this sample data, each equipment is linked to a 3 levels class hierarchy:
EQUNR | EQKTX | CUOBJ | CLINT |
000000005002318484 | G09 - ARM.STEEL.1 | 000000000002944088 | 0000006420 |
000000005002318484 | G09 - ARM.STEEL.1 | 000000000002944088 | 0000000737 |
000000005002318484 | G09 - ARM.STEEL.1 | 000000000002944088 | 0000000693 |
000000005002468256 | PF - EXLIM P360-GH - Ph : 0 | 000000000003125606 | 0000002368 |
000000005002468256 | PF - EXLIM P360-GH - Ph : 0 | 000000000003125606 | 0000000947 |
000000005002468256 | PF - EXLIM P360-GH - Ph : 0 | 000000000003125606 | 0000000944 |
Your help on making this query work would be very much appreciated.
Here are CREATE TABLE and INSERT statements for sample data:
CREATE TABLE EQKT
(
EQUNR VARCHAR2(18 BYTE) NOT NULL,
EQKTX VARCHAR2(40 BYTE) NOT NULL
)
INSERT ALL
INTO EQKT(EQUNR,EQKTX) VALUES ('000000005002318484','G09 - ARM.STEEL.1')
INTO EQKT(EQUNR,EQKTX) VALUES ('000000005002468256','PF-EXLIM P360-GH-Ph:0')
SELECT 1 FROM DUAL;
CREATE TABLE INOB
(
CUOBJ VARCHAR2(18 BYTE) NOT NULL,
OBJEK VARCHAR2(50 BYTE) NOT NULL
)
INSERT ALL
INTO INOB(CUOBJ,OBJEK) VALUES ('000000005002318484','000000000002944088')
INTO INOB(CUOBJ,OBJEK) VALUES ('000000005002468256','000000000003125606')
SELECT 1 FROM DUAL;
CREATE TABLE KSSK
(
OBJEK VARCHAR2(50 BYTE) NOT NULL,
CLINT VARCHAR2(10 BYTE) NOT NULL
)
INSERT ALL
INTO KSSK(OBJEK,CLINT) VALUES ('000000000002944088','0000006420')
INTO KSSK(OBJEK,CLINT) VALUES ('0000006420','0000000737')
INTO KSSK(OBJEK,CLINT) VALUES ('0000000737','0000000693')
INTO KSSK(OBJEK,CLINT) VALUES ('000000000003125606','0000002368')
INTO KSSK(OBJEK,CLINT) VALUES ('0000002368','0000000947')
INTO KSSK(OBJEK,CLINT) VALUES ('0000000947','0000000944')
SELECT 1 FROM DUAL;