Проблема с получением правильных данных - PullRequest
0 голосов
/ 17 сентября 2011

Я создал запрос, который выглядит следующим образом, но я не нашел способа сгруппировать отделы вместе.Это та часть, с которой мне нужна помощь.Я хочу получить номер Департамента в одном столбце, сотрудник - это другой, а затем человек, который будет их коллегой в другом.Любая помощь была бы великолепна.

Это то, что я хочу, чтобы она выглядела

  DEPARTMENT    EMPLOYEE   COLLEAGUE
     10          CLARK         KING
     10          CLARK         MILLER
     10          KING          CLARK
     10          KING          MILLER
     10          MILLER        CLARK
     10          MILLER        KING
     20          ADAMS         FORD
     20          ADAMS         JONES
     20          ADAMS         SCOTT
     20          ADAMS         SMITH

И вот что я получил, но это неверно.и Миллер.Коллега Кларкса не Кларк, его король и Миллер.

    SQL> select ename AS Employee, deptno AS Department, ename AS Colleague from emp order by deptno asc;

   EMPLOYEE   DEPARTMENT COLLEAGUE
   ---------- ---------- ----------
   KING               10 KING
   CLARK              10 CLARK
   MILLER             10 MILLER
   ADAMS              20 ADAMS
   SCOTT              20 SCOTT
   SMITH              20 SMITH
   FORD               20 FORD
   JONES              20 JONES
   WARD               30 WARD
   JAMES              30 JAMES
   ALLEN              30 ALLEN

  EMPLOYEE   DEPARTMENT COLLEAGUE
  ---------- ---------- ----------
  MARTIN             30 MARTIN
  BLAKE              30 BLAKE
  TURNER             30 TURNER

 14 rows selected.

Вот таблица отдела

 SQL> select * from dept;

DEPTNO DNAME          LOC
---------- -------------- -------------
    10 ACCOUNTING     NEW YORK
    20 RESEARCH       DALLAS
    30 SALES          CHICAGO
    40 OPERATIONS     BOSTON

Вот таблица emp

 SQL> select ename, deptno, job from emp;

 ENAME          DEPTNO JOB
 ---------- ---------- ---------
 KING               10 PRESIDENT
 BLAKE              30 MANAGER
 CLARK              10 MANAGER
 JONES              20 MANAGER
 MARTIN             30 SALESMAN
 ALLEN              30 SALESMAN
 TURNER             30 SALESMAN
 JAMES              30 CLERK
 WARD               30 SALESMAN
 FORD               20 ANALYST
 SMITH              20 CLERK

 ENAME          DEPTNO JOB
 ---------- ---------- ---------
 SCOTT              20 ANALYST
 ADAMS              20 CLERK
 MILLER             10 CLERK

 14 rows selected.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

Звучит так, как будто вы хотите что-то вроде

SQL> ed
Wrote file afiedt.buf

  1  select deptno department,
  2         e1.ename employee,
  3         e2.ename colleague
  4    from emp e1 join emp e2 using (deptno)
  5   where e1.empno != e2.empno
  6*  order by deptno
SQL> /

DEPARTMENT EMPLOYEE   COLLEAGUE
---------- ---------- ----------
        10 MILLER     CLARK
        10 KING       CLARK
        10 MILLER     KING
        10 CLARK      MILLER
        10 KING       MILLER
        10 CLARK      KING
 <<additional results removed>>
0 голосов
/ 17 сентября 2011
 Select distinct d.dname, t1.employee, t2.employee college
 From emp t1
 inner join dept d on d.deptno = t1.deptno
 Inner join emp t2 on t2.deptno = t1.deptno and t1.employee <> t2.employee
...