2016-05-27 10 views
4

私は別の質問があります。私はその概念を完全に把握しているようには見えない。自己参照テーブル。 MySQL

私はテーブルを持っている:私はオフィスの従業員のデータを取得する必要があり

EMPLOYEES 

| EMP_NO | APELLIDO | OFFICE | DIRECTOR | START_DATE | SALARY | COMMISSION | DEP_NO | 

は「監督」(簡単ですが、...)であり、私はまた、完全な給料を返す列を含める必要が従業員全員の給与(給与+手数料)

今私は自分自身(EMPLOYEES e1、EMPLOYEES e2など)を参照できるようにテーブルを 'コピー'する必要があることを知っています。しかし、私は実際にそれらの部下の給与の合計を得ることに取り組んでいます。

どのような考えですか? (PLSのヘルプ)真

EDIT

申し訳ありませんが、みんな、。私のせい。 OK、ので、ここでいくつかのサンプルデータです:私は今達成するために必要なことはすべての合計給与を含むことになり、従業員のGARRIDOと追加の列とともにMARTINEZ(EMP_NO 7698および7782)の詳細を持つテーブルを返すことです

+--------+----------+------------+----------+------------+---------+----------+--------+ 
| EMP_NO | SURNAME | OFFICE  | DIRECTOR | START_DATE | SALARY |COMMISSION| DEP_NO | 
+--------+----------+------------+----------+------------+---------+----------+--------+ 
| 7499 | ALONSO |SALESPERSON |  7698 | 1981-02-23 | 1400.00 | 400.00 |  30 | 
| 7521 | LOPEZ | EMPLOYEE |  7782 | 1981-05-08 | 1350.50 |  NULL |  10 | 
| 7654 | MARTIN |SALESPERSON |  7698 | 1981-09-28 | 1500.00 | 1600.00 |  30 | 
| 7698 | GARRIDO | DIRECTOR |  7839 | 1981-05-01 | 3850.12 |  NULL |  30 | 
| 7782 | MARTINEZ | DIRECTOR |  7839 | 1981-06-09 | 2450.00 |  NULL |  10 | 
| 7839 | REY  | CEO  |  NULL | 1981-11-17 | 6000.00 |  NULL |  10 | 
| 7844 | CALVO |SALESPERSON |  7698 | 1981-09-08 | 1800.00 |  0.00 |  30 | 
| 7876 | GIL  | ANALIST |  7782 | 1982-05-06 | 3350.00 |  NULL |  20 | 
| 7900 | JIMENEZ | EMPLOYEE |  7782 | 1983-03-24 | 1400.00 |  NULL |  20 | 
+--------+----------+------------+----------+------------+---------+----------+--------+ 

彼らの直属の部下。次のようなものがあります:

+--------+----------+------------+----------+------------+---------+----------+--------+-----------+ 
| EMP_NO | SURNAME | OFICIO  | DIRECTOR | FECHA_ALTA | SALARIO | COMISION | DEP_NO | TOTAL_EMP | 
+--------+----------+------------+----------+------------+---------+----------+--------+-----------+  
| 7698 | GARRIDO | DIRECTOR |  7839 | 1981-05-01 | 3850.12 |  NULL |  30 | 6700 | 
| 7782 | MARTINEZ | DIRECTOR |  7839 | 1981-06-09 | 2450.00 |  NULL |  10 | 1350.50 | 
+--------+----------+------------+----------+------------+---------+----------+--------+-----------+ 
+0

ポストサンプルデータと期待出力 – Matt

+0

あなただけの直接の部下を探しているか、など部下のすべてに加えて彼らの部下の部下のすべての合計給与を取得する必要がありますか? –

+0

ディレクターは従業員とどのようにリンクしていますか?それは「DIRECTOR」列ですか? –

答えて

2

私はこれを行うべきだと思います。必要な他の行にはJOINが必要です。グループ化するだけで簡単に集計することができます。

SELECT 
    D.emp_no, 
    D.apellido, -- Why is there one column named in Spanish and the rest in English? 
    D.office, 
    D.director, 
    D.start_date, 
    D.salary, 
    D.commission, 
    D.dep_no, 
    SUM(COALESCE(S.salary, 0) + COALESCE(S.commission, 0)) AS subordinates_compensation 
FROM 
    Employees D 
LEFT OUTER JOIN Employees S ON S.director = D.emp_no 
WHERE 
    D.office = 'Director' 
GROUP BY 
    D.emp_no, 
    D.apellido, 
    D.office, 
    D.director, 
    D.start_date, 
    D.salary, 
    D.commission, 
    D.dep_no 
+0

私はちょっとちがうので、その1つを翻訳しなかったので:)ありがとう、私は今それを試しています。 – CNB

+0

OK。ありがとう、それは確かに動作します。私はディレクターの給料を除外する必要があります。 :)完璧、ありがとう(私は試験の準備が整っていない)。 – CNB

+0

ディレクターの行が自身を指す場合( 'director = emp_no')、' JOIN'節に条件を追加してその行を削除することができます( 'AND S.emp_no <> D.emp_no') –