Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. SELECT
  2. /* 1 - сквозной номер сотрудника */ /* TODO() сквозной номер отдела*/
  3. DECODE(GROUPING(employee_id), 0, TO_CHAR(dept_order), ' ') "Номер отдела",
  4. /* 2 - отдел */
  5. CASE
  6. WHEN GROUPING(employee_id) = 0 THEN
  7. TO_CHAR(department_id)
  8. --WHEN
  9. -- TODO() условие
  10. --THEN
  11. -- ' '
  12. WHEN GROUPING(department_id) = 0 THEN
  13. 'Кол-во сотрудников в отделе'
  14. ELSE
  15. 'Общее кол-во сотрудников в отделах'
  16. END "Идентификатор отдела",
  17. /* 3 - название отдела */
  18. DECODE(GROUPING(department_id), 0, department_name, ' ') "Название отдела",
  19. /* 4 - номер сотрудника в отделе */
  20. --TODO()
  21. DECODE(GROUPING(employee_id), 0, COUNT(employee_id)) "Номер сотрудника",
  22. /* 4 - имя сотрудника или число людей в отделе */
  23. DECODE(GROUPING(employee_id), 0, TRIM(first_name
  24. || ' '
  25. || last_name), COUNT(employee_id)) "Сотрудник"
  26. FROM
  27. departments left
  28. JOIN employees USING ( department_id )
  29. LEFT JOIN (
  30. /* Сквозная нумерация = ROWNUM в отсортированном запросе по имени отдела и имени сотрудника */
  31. SELECT
  32. emp_id,
  33. ROWNUM emp_order
  34. FROM
  35. (
  36. SELECT
  37. employee_id emp_id
  38. FROM
  39. employees
  40. JOIN departments USING ( department_id )
  41. ORDER BY
  42. department_name,
  43. first_name,
  44. last_name
  45. )
  46. ) ON employee_id = emp_id
  47. LEFT JOIN (
  48. SELECT
  49. dept_name,
  50. ROWNUM dept_order
  51. FROM
  52. (
  53. SELECT DISTINCT
  54. department_name dept_name
  55. FROM
  56. employees
  57. JOIN departments USING ( department_id )
  58. ORDER BY department_name
  59. )
  60. ) ON department_name = dept_name
  61. GROUP BY
  62. ROLLUP(
  63. (department_id,
  64. department_name),
  65. (employee_id,
  66. first_name,
  67. last_name,
  68. emp_order,
  69. dept_order) --TODO() добавить номер сотрудника в отделе
  70. )
  71.  
  72. HAVING NOT ( GROUPING(employee_id) = 0
  73. AND employee_id IS NULL )
  74. ORDER BY
  75. department_name,
  76. first_name,
  77. last_name;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement