Вывод отдела и служащих, работающих в этом отделе без повторения названия отдела

is_ivan
Дата: 17.12.2012 15:46:52
Всем привет, не могу разобраться со следующей проблемой
Имеется две таблицы: Employees(last_name, department_id, и т.д) и Departments(department_id, department_name, ...)
Необходимо вывести информацию об отделах и сотрудниках, которые работают в данных отделах в следующем виде:
department_name last_name
Accounting Higgins
Gietz
Executive Kochhar
De Haan
King

...

На данный момент, у меня выводится в таком виде:
department_name last_name
Accounting Higgins
Accounting Gietz
Executive Kochhar
Executive De Haan
Executive King

...

Соединил две таблицы по department_id и вывел названия отделов и фамилии сотрудников
SELECT department_name, last_name
FROM employees emp
JOIN departments dep
ON (emp.department_id = dep.department_id)
ORDER BY department_name;


Каким образом можно реализовать данную идею?
Bogdanov Andrey
Дата: 17.12.2012 16:01:15
is_ivan,

case department_name 
     when max(department_name) over (order by department_name rows between 1 preceding and 1 preceding) 
       then null 
       else department_name 
end
stax..
Дата: 17.12.2012 16:02:27
is_ivan,
  1  select
  2   lag(null,1,dname) over (partition by d.deptno order by ename) dn
  3   --,e.deptno
  4   ,e.ename
  5  from emp e,dept d
  6  where e.deptno=d.deptno
  7* order by e.deptno,dname nulls last,ename
SQL> /

DN             ENAME
-------------- ----------
ACCOUNTING     CLARK
               KING
               MILLER
RESEARCH       ADAMS
               FORD
               JONES
               SCOTT
               SMITH
SALES          ALLEN
               BLAKE
               JAMES
               MARTIN
               TURNER
               WARD

14 rows selected.



ps
в плюсе BRE ON ...

.......
stax
Bogdanov Andrey
Дата: 17.12.2012 16:13:33
stax..,

Блин, про lag-то я совсем забыл. А с ним гораздо проще.
Добрый Э - Эх
Дата: 17.12.2012 16:15:36
min... lag...
а что, простой row_number() over(partition by department_name) уже не рулит?
Гую - гуево
Дата: 17.12.2012 16:21:14
stax..
в плюсе BRE ON ...
Единственный правильный по сути ответ.
stax..
Дата: 17.12.2012 16:51:42
Добрый Э - Эх
min... lag...
а что, простой row_number() over(partition by department_name) уже не рулит?

рулит, дело смаку, чем он хуже/луче lag?

.....
stax
Добрый Э - Эх
Дата: 17.12.2012 17:41:25
stax..,

IMHO, row_number интуитивно понятнее.
is_ivan
Дата: 17.12.2012 22:48:04
Спасибо за помощь, но мне для выполнения этого задания нельзя пользоваться функцией lag. Я только учусь sql. Нам необходимо реализовать задачу с помощью соединений + основные возможности sql (CASE, BETWEEN, IN и т.д.). Вроде бы эту функцию применяют чтобы не соединять таблицу саму с собой. Как можно обойтись стандартными соединениями, без использования этой функции?
Сейчас буду пробовать, разбираться...Если у кого то появятся идеи и предложения, буду рад)
andreymx
Дата: 17.12.2012 23:12:29
Гую - гуево
stax..
в плюсе BRE ON ...
Единственный правильный по сути ответ.
только нахрен ни кому не нужный