Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SELECT
- /* 1 - сквозной номер сотрудника */ /* TODO() сквозной номер отдела*/
- DECODE(GROUPING(employee_id), 0, TO_CHAR(dept_order), ' ') "Номер отдела",
- /* 2 - отдел */
- CASE
- WHEN GROUPING(employee_id) = 0 THEN
- TO_CHAR(department_id)
- --WHEN
- -- TODO() условие
- --THEN
- -- ' '
- WHEN GROUPING(department_id) = 0 THEN
- 'Кол-во сотрудников в отделе'
- ELSE
- 'Общее кол-во сотрудников в отделах'
- END "Идентификатор отдела",
- /* 3 - название отдела */
- DECODE(GROUPING(department_id), 0, department_name, ' ') "Название отдела",
- /* 4 - номер сотрудника в отделе */
- --TODO()
- DECODE(GROUPING(employee_id), 0, COUNT(employee_id)) "Номер сотрудника",
- /* 4 - имя сотрудника или число людей в отделе */
- DECODE(GROUPING(employee_id), 0, TRIM(first_name
- || ' '
- || last_name), COUNT(employee_id)) "Сотрудник"
- FROM
- departments left
- JOIN employees USING ( department_id )
- LEFT JOIN (
- /* Сквозная нумерация = ROWNUM в отсортированном запросе по имени отдела и имени сотрудника */
- SELECT
- emp_id,
- ROWNUM emp_order
- FROM
- (
- SELECT
- employee_id emp_id
- FROM
- employees
- JOIN departments USING ( department_id )
- ORDER BY
- department_name,
- first_name,
- last_name
- )
- ) ON employee_id = emp_id
- LEFT JOIN (
- SELECT
- dept_name,
- ROWNUM dept_order
- FROM
- (
- SELECT DISTINCT
- department_name dept_name
- FROM
- employees
- JOIN departments USING ( department_id )
- ORDER BY department_name
- )
- ) ON department_name = dept_name
- GROUP BY
- ROLLUP(
- (department_id,
- department_name),
- (employee_id,
- first_name,
- last_name,
- emp_order,
- dept_order) --TODO() добавить номер сотрудника в отделе
- )
- HAVING NOT ( GROUPING(employee_id) = 0
- AND employee_id IS NULL )
- ORDER BY
- department_name,
- first_name,
- last_name;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement