2016-08-09 1 views
2

投稿者数を数え、リストを出力する方法はわかりません。提出された人の数をカウントする方法

Employees.ReportsToは、このユーザーが送信するIDを示します。

出力にあります
Select 
    Employees.LastName, 
    Employees.FirstName, 
    Region.RegionDescription, 
    count(case 
     when Employees.ReportsTo=Employees.EmployeeID then 1 
     end) as Count_of_employees, 
    Subordinates = STUFF((SELECT ', ' + Employees.LastName 
         FROM Employees 
         WHERE Employees.ReportsTo = Employees.EmployeeID 
         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 
from 
    Employees 
left join 
    EmployeeTerritories 
     on Employees.EmployeeID=EmployeeTerritories.EmployeeID 
left join 
    Territories 
     on EmployeeTerritories.TerritoryID=Territories.TerritoryID 
left join 
    Region 
     on Territories.RegionID=Region.RegionID 
group by 
    Region.RegionDescription, 
    Employees.LastName, 
    Employees.FirstName 

:ここ

Last name First Name  RegionDescription Count_of_employees Subordinates 
Davolio Nancy   Eastern    0    NULL 
Fuller  Andrew   Eastern    0    NULL 
Peacock Margaret  Eastern    0    NULL 
Buchanan Steven   Eastern    0    NULL 

なければならないこと:

Last name First Name  RegionDescription Count_of_employees Subordinates 
Davolio Nancy   Eastern    0    NULL 
Fuller  Andrew   Eastern    3  Davolio,Peacock, Buchanan  
Peacock Margaret  Eastern    0    NULL 
Buchanan Steven   Eastern    0    NULL 

主な問題は、あなたがフィールドを比較している従業員

FirstName LastName EmployeeID ReportsTo 
Nancy  Davolio  1   2 
Andrew  Fuller  2   NULL 
Janet  Leverling 3   2 
Margaret Peacock  4   2 
Steven  Buchanan 5   2 
Michael  Suyama  6   5 
Robert  King  7   5 
Laura  Callahan 8   2 
Anne  Dodsworth 9   5 
+1

を入力してください。クエリの出力内容と期待される結果の詳細をご記入ください – TheGameiswar

+0

質問を編集して関連テーブルDDLとサンプルデータをDMLに含めてください。 –

答えて

0

からのサンプルデータであります同じ行にのみ表示されます。 Employeesにはエイリアスがないため、SQL ServerはインナーセレクトのEmploees.ReportsToとメインセレクトのEmployees.EmployeeIDを比較することはできません。部下を変更してみてください。また

Subordinates = STUFF((SELECT ', ' + Employees.LastName 
        FROM Employees ESubordinate -- so SQL knows it's a "different" table 
        WHERE ESubordinate.ReportsTo = Employees.EmployeeID 
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

、similare理由COUNTためCASEを使用しないでください。別のインナーセレクトを使用してください:

-- the() are important here, and ECount differentiates the two Employees tables too 
(SELECT COUNT(1) FROM Employees ECount WHERE ECount.ReportsTo = Employees.ReportsTo) as Count_of_employees, 

それはあなたの問題を解決するはずです。それが最速ではないことを覚えておいてください。速度を求めたい場合は、CROSS APPLY

+0

ありがとうございました!!! –

関連する問題