3

これはスタック オーバーフローに関する私の最初の投稿で、比較的単純な初心者の SQL に関する質問があります。私の仕事は、データベース内の各従業員のタイムシートの提出が遅れた回数を見つけることです。私が主に見ている 2 つのテーブルがありますが、2 つをまとめて、出現回数とそれらが関連付けられている従業員 ID の適切なビューを考え出すのに苦労しています。

EmployeeID出現ごとに提供するこのクエリを作成しました。

SELECT db.Employee.EmployeeID 
FROM db.LateTimesheets
INNER JOIN db.Employee ON Employee.LastName = LateTimesheets.LastName AND Employee.FirstName = Late Timesheets.FirstName

さて、この単純なクエリを使用して、EmployeeIDこれらのインシデントが何度も繰り返されていることを確認できます。ただし、最終的には、発生ごとのカウントと、EmployeeIDこのカウントが関連付けられている を表示するテーブルを作成したいと考えています。

COUNT()関数を使用して各 の行数をカウントし、EmployeeIDその値を とともに選択する必要があると思いますEmployeeID。ただし、サブクエリを正しく構成するのに問題があり、これまでに試したことはすべて、MS SQL Server Management Studio でのみエラーを生成しました。

どんな助けでも大歓迎です。ありがとうございます!

4

3 に答える 3

2

usrの答えのより単純なバージョンは、派生テーブルの構築を回避する次のようになります。

Select db.Employee.EmployeeID, Count( db.LateTimesheets.somecolumn ) As Total
From db.Employee 
    Left Join db.LateTimesheets
        On LateTimesheets.LastName  = Employee.LastName
            And Late Timesheets.FirstName = Employee.FirstName
Group By db.Employee.EmployeeID
于 2012-05-05T00:02:30.763 に答える
1

私は質問を誤解しているかもしれませんが、GROUP BYあなたの問題は解決しませんか?

SELECT COUNT(db.LateTimesheets.somecolumn), db.Employee.EmployeeID 
FROM db.LateTimesheets
INNER JOIN db.Employee ON Employee.LastName = LateTimesheets.LastName 
    AND Employee.FirstName = Late Timesheets.FirstName
GROUP BY db.Employee.EmployeeID

somecolumn実際にテーブルにある列の名前に置き換えるだけです。

于 2012-05-04T22:47:02.397 に答える
0
select e.*, isnull(lt.Count, 0) as Count
from Employee e
left join (
 select LastName, count(*) as Count from LateTimesheets
) LateTimesheets lt on e.LastName = lt.LastName

トリックは、派生テーブルでグループ化を行うことです。すべてをグループ化するのではなく、LateTimesheets だけをグループ化します。

LateTimesheets のない従業員を引き続き取得するには、左結合が必要です。

于 2012-05-04T22:46:41.513 に答える