1

私の脳は、これを理解しようとしてタピオカに変わっています. 部下と上司のテーブルがあります。すべての従業員はコース番号を持っています。これが例です。

3 つのフィールドがあります: employee_id、name、supervisor_id

Fred Wilkie はスーパーバイザーであり、彼の記録は ....

employee_id: 1
name: Fred Wilkie
supervisor_id: NULL 

テッド・ウィルキーは下級労働者で、フレッドは彼の上司です。彼のエントリは次のようになります....

employee_id: 2
name: Ted Wilkie
supervisor_id: 1

クエリをどのように表示したいかは、employee_id、name、supervisor_id ですが、supervisor_id が NULL の場合、supervisor_id は employee_id と同じにする必要があります。

これはちょっとうまくいきます...(どうにかしてそれを改良する必要があると思います)

select employee_id, name, supervisor_id case when supervisor_id is NULL then employee_id else supervisor_id end from employees order by supervisor_id;

これの問題は、employee_idがsupervisor_idと等しいすべてのレコードを最初に注文し、次に残っている部下を吐き出すことです....

employee_id, name, supervisor_id
1, Fred Wilkie, 1
4, Gail Winston, 4
2, Ted Wilkie, 1
3, Lisa Wilkie, 1
5, Russ Cablas, 4
6, Ben Reynolds, 4
etc, etc, etc...

私が欲しいのはこれです......

employee_id, name, supervisor_id
1, Fred Wilkie, 1
2, Ted Wilkie, 1
3, Lisa Wilkie, 1
4, Gail Winston, 4
5, Russ Cablas, 4
6, Ben Reynolds, 4
etc, etc, etc...

上記の例では、最初のスーパーバイザー (Fred) がリストされ (employee_id = Supervisor_id)、次に彼のすべての部下がリストされています。あとはゲイル、その配下の皆さんなどなど。

私たちは大企業 (従業員 250 人) を経営しているため、これを MySQL ロジックに保持する方法が必要です。誰にもアイデアはありますか?

どうもありがとう!ジャニー

4

3 に答える 3

1

これに関する最も簡単な解決策は、COALESCE

SELECT  employee_ID,
        name,
        COALESCE(supervisor_id, employee_id) AS supervisor_id
FROM    employees
ORDER BY supervisor_id, employee_ID

SQLFiddleデモ

追加のクエリ(idの代わりにスーパーバイザー名を取得する場合

SELECT  a.employee_ID,
        a.name,
        COALESCE(b.name, a.name) AS Supervisor_Name
FROM    employees a
        LEFT JOIN employees b
          ON a.supervisor_ID = b.employee_ID
ORDER BY COALESCE(b.supervisor_id, a.employee_id), employee_ID

SQLFiddleデモ

于 2012-09-26T06:24:23.947 に答える
0

使用しているレコードを取得するためのシーケンスが欠落していると思いますが、シーケンスをorder byポンティングしていないASCか、DESC

select employee_id, name, 
supervisor_id case when supervisor_id is NULL 
then employee_id else supervisor_id end 
from employees 
order by supervisor_id
ASC;

これがうまくいくことを願っています

于 2012-09-26T05:25:22.430 に答える