2017-04-03 13 views
1

私は私が達成しようとしているものの例を与えるためにMS SQL Serverの2014 で同じテーブルの上に営巣クエリで階層を構築しようとしています:SQL:同じテーブルの上に構築階層およびネスティングクエリ

私は、次の表の列whithの従業員」を持っている:

[ID],[First Name],[Last Name],[ReportsTo] 

{1},{John},{Doe},{2} 

{2},{Mary},{Miller},{NULL} 

私は自分自身と従業員のテーブルを結合文、どこで私が一番上に上司と階層を構築を構築しようとしています。

期待される結果:

[Employee],[Boss] 

{Miller,Mary},{NULL} 

{Doe, John},{Miller,Mary} 

これは愚かな質問である場合、私は、謝罪が、私は働いてネストされたクエリの作成に失敗します。

お手伝いできますか?

は、それはあなたが基本的に従業員のリストで欲しいもののように見え、意図した結果に基づいて予め

+0

階層の深さは何レベルですか?つまり、上司がボスを持つことはできますか? –

+0

3つのレベルで十分です。素早い回答ありがとう – STFE

+0

希望の結果セットとして表示されているのは、各従業員に直属のマネージャが表示されているだけです。それよりも洗練されたものが必要ですか? –

答えて

0

にありがとうございました。それでは、それとを開始てみましょう:

SELECT LastName, FirstName, ReportsTo FROM Employees 

これはあなたのリストを与えるので、あなたは今、あなたが探しているオブジェクトを持っています。しかし、より多くのデータを記入する必要があります。 ReportsToに従って、それが指し示すレコードのデータを表示したいとします。これは、外部キーが別のテーブルを指している場合とまったく同じように行われます。 (。同じテーブルであることから、唯一の違いは、あなたが二度同じテーブルを含めているので、あなたは、クエリでテーブルの別名を使用しなければならないということです)

それでは、テーブルを結合してみましょう:

SELECT e.LastName, e.FirstName, e.ReportsTo 
FROM Employees e 
    LEFT OUTER JOIN Employees b on e.ReportsTo = b.ID 

結果は変わらないはずですが、選択するデータが増えました。ですから、SELECT句に新しい列を追加することができます:それは他のどのように参加するのです

SELECT 
    e.LastName AS EmployeeLastName, 
    e.FirstName AS EmployeeFirstName, 
    b.LastName AS BossLastName, 
    b.FirstName AS BossFirstName 
FROM Employees e 
    LEFT OUTER JOIN Employees b on e.ReportsTo = b.ID 

を、それだけで同じテーブルに参加することを起こります。

+0

ありがとうございました!それが私の質問に答えました – STFE

関連する問題