2017-10-13 15 views
0

私はこの問題の助けが必要です。"GROUP BY"から "COUNT"を選択

このテーブルを持つ:

CREATE TABLE Employees (
    Id int, 
    Name varchar(30), 
    Salary Money, 
    BossId int, 
    Ocupation varchar(20)) 

INSERT INTO Employees VALUES(1,'Juan',15000,7,'Ventas') 
INSERT INTO Employees VALUES(2,'Federico',16000,7,'Ventas') 
INSERT INTO Employees VALUES(3,'Marcos',12000,8,'Compras') 
INSERT INTO Employees VALUES(4,'Alberto',9000,8,'Compras') 
INSERT INTO Employees VALUES(5,'Gonzalo',5000,8,'Compras') 
INSERT INTO Employees VALUES(6,'Noelia',13000,7,'Ventas') 
INSERT INTO Employees VALUES(7,'Roberto',20000,9,'Ventas') 
INSERT INTO Employees VALUES(8,'Diego',19000,9,'Ventas') 
INSERT INTO Employees VALUES(9,'Damian',25000,null,'Compras') 

私は、二つ以上の従業員のヘッドで、従業員の担当従業員の名前、給与と番号を取得できますか?

結果は以下のようになります。

Roberto 2000 3 
Diego 19000 3 

ありがとう!

+0

ボス関係の「深さ」は複数あることができますか? IEはCとDの上司であるBの上司になることができますか? –

+0

はい、誰でも誰の上司でもかまいません。 IE "Damian"は、 "Gonzalo"、 "Alberto"、 "Marcos"のボスである "Diego"のボスです。 –

答えて

0
SELECT 
    E1.Name 
    , E1.Salary 
    , COUNT(*) Employees 
FROM 
    Employees E1 
    JOIN Employees E2 ON E1.Id = E2.BossId 
GROUP BY 
    E1.Name 
    , E1.Salary 
HAVING COUNT(*) > 2 
+0

これは実際には@ GianneBoschettoの前のコメントには当てはまりません。 AがCとDの上司であるBの上司であることが許されているとすると、このスクリプトはBを間違って返します。正しい答えはAとBです。 –

+1

いいえ、ごめんなさい!私はあなたの質問を理解していなかった。誰でも誰の上司でもかまいません。しかし問題は、それが「直接的な」上司に関することです。これは私の問題でうまく動作します。 –

+1

@DerekBrown再帰的なものではないので、私のスクリプトはBを間違って返しません。直接従業員の数を返します。 BはBossId列に2回だけ表示されるため、COUNT(*)は2になり、Bの行は返されません。ありがとう。 –