I have table which has two columns
----------------------
| NAME | FATHER_NAME |
----------------------
DDL :
CREATE TABLE RELATION (NAME VARCHAR(20), FATHER_NAME VARCHAR(20));
INSERT INTO RELATION VALUES ('ADESH','ASHOK');
INSERT INTO RELATION VALUES ('ASHOK','KA');
INSERT INTO RELATION VALUES ('KA',NULL);
INSERT INTO RELATION VALUES ('ANSH','ADESH');
INSERT INTO RELATION VALUES ('BASH','ANSH');
INSERT INTO RELATION VALUES ('DEVEN','SUBASH');
INSERT INTO RELATION VALUES ('SUBASH','KA');
INSERT INTO RELATION VALUES ('PRAKASH',NULL);
INSERT INTO RELATION VALUES ('PRADEEP','PRAKASH');
INSERT INTO RELATION VALUES ('SAI','PRADEEP');
I have sample data here as shown in image.
As desired output would be
So I tried to solve this with CONNECT_BY or Recursive CTE
WITH REL_CTE AS
(
SELECT NAME,FATHER_NAME, 1 AS L
FROM RELATION
WHERE FATHER_NAME IS NULL
UNION ALL
SELECT R.NAME,R.FATHER_NAME,CTE.L+1
FROM RELATION R JOIN REL_CTE CTE
ON R.FATHER_NAME = CTE.NAME
)
SELECT * FROM REL_CTE
But could not get the desired result. Hence looking out for solution.