Запрос:
with departments (department_id, department_name) as (
select 90, 'Executive' from dual union all
select 100, 'Finance' from dual union all
select 110, 'Accounting' from dual
),
employees (employee_id, last_name, department_id) as (
select 1003, 'King' , 90 from dual union all
select 1005, 'De Hann' , 90 from dual union all
select 1009, 'Gietz' , 110 from dual union all
select 1013, 'Popp' , 100 from dual union all
select 1014, 'Chen' , 100 from dual union all
select 1015, 'Higgins' , 110 from dual union all
select 1029, 'Greenberg', 100 from dual union all
select 1040, 'Kochar' , 90 from dual union all
select 1043, 'Faviet' , 100 from dual union all
select 1045, 'Urman' , 100 from dual union all
select 1049, 'Sciarra' , 100 from dual
)
-- end input data; begin actual query --
select c_name, department_id from
(select department_name as c_name, department_id, 0 as categ from departments
union all
select ' ' || last_name as c_name, department_id, 1 from employees
order by department_id, categ, c_name
);
Результат:
C_NAME DEPARTMENT_ID
------------- -------------
Executive 90
De Hann 90
King 90
Kochar 90
Finance 100
Chen 100
Faviet 100
Greenberg 100
Popp 100
Sciarra 100
Urman 100
Accounting 110
Gietz 110
Higgins 110
Вам не нужна деталь «с ...»; просто используйте запрос, который начинается в инструкции SELECT после двух факторизованных подзапросов (после «входных данных»). Я даже заказал по фамилии в каждом отделе для вас; если это не требуется, просто удалите «c_name» из предложения ORDER BY.
Я назвал первый столбец c_name; вы можете называть это так, как хотите, но называть его имя_дерева, когда оно также содержит фамилии сотрудников, не имело для меня большого смысла. Чтобы назвать это, вы хотите изменить инструкцию SELECT от SELECT c_name, department_id
до SELECT c_name AS whatever, department_id...
Отличный ответ. Я никогда не использовал UNION, возможно, потому, что я не знал об использовании. Спасибо за лучший ответ. –
Спасибо, что вам нужна помощь. Этот ответ - это то, что я спросил. –