У меня есть таблица, в которой есть строки в родительских дочерних отношениях. Максимальная глубина отношений между родителями и детьми равна 3.Отдельные столбцы с использованием connect by
У одного родителя будет только один ребенок.
определения таблицы -
CREATE TABLE USERS {
empid NUMBER,
name VARCHAR2,
department VARCHAR2(20),
oldempid NUMBER,
}
данных -
EMPID NAME DEPARTMENT OLDEMPID
1 FOO IT 2
2 null HR 4
3 BAR ADMIN null
4 null DESIGN null
Желаемая выход -
EMPID NAME DEPARTMENT_1 DEPARTMENT_2 DEPARTMENT_3
1 FOO IT HR DESIGN
3 BAR ADMIN null null
Полный Желаемая выход -
EMPID NAME DEPARTMENT_1 DEPARTMENT_2 DEPARTMENT_3 OLDEMPID_1 OLDEMPID_2
1 FOO IT HR DESIGN 2 4
3 BAR ADMIN null null null null
Я попытался с помощью CONNECT BY PRIOR
SELECT CONNECT_BY_ROOT EMPID,
NAME,
RTRIM(LTRIM(SYS_CONNECT_BY_PATH(DEPARTMENT, '-'), '-'), '-') AS DEPARTMENT,
RTRIM(LTRIM(SYS_CONNECT_BY_PATH(OLDEMPID, '-'), '-'), '-') AS OLDEMPID
FROM USERS
WHERE CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR OLDEMPID = EMPID;
Выход я получаю -
EMPID NAME DEPARTMENT OLDEMPID
1 null IT-HR-DESIGN 1-2-4
3 BAR ADMIN null
Спасибо. Тем не менее, я все еще получаю вопрос о названии сотрудника. Я отредактировал вопрос. Можете ли вы, пожалуйста, посмотреть? – JHS
Вы делаете с «именем» именно то, что я сделал с «empid». Я обновил ответ, чтобы включить NAME. – mathguy