この質問に適切なタイトルを付けるのは難しいですが、以下で詳しく説明します。質問をしやすくするために、これらの表を少し単純化します。
次の列を持つ「ユーザー」というテーブルがあります。
UserRowId (PK)
FirstName
LastName
RegionRowId (FK)
Active
次の列を持つ「地域」というテーブルがあります。
RegionRowId
RegionDesc
UserRowId
ここでのロジックは、ユーザーが User テーブルの RegionRowId によって示される「地域」に属しているということです。各地域 (「地域」テーブル内) には、「地域」テーブルの「UserRowId」列 (「ユーザー」テーブルからの FK) で示される地域マネージャーがいます。
次の列を持つ「UserTime」というテーブルがあります。
UserTimeRowId (PK)
UserRowId (FK)
Hours
Sales
ここでのロジックは、ユーザー (UserRowId によってマップされる) が、このテーブルに格納される営業時間と売上を報告することです。ユーザーが売上/時間を報告するたびに、新しい行が作成されます。
私が達成しようとしていること:
FirstName、LastName、このユーザーの地域マネージャー、時間の合計、および売上の合計を取得するクエリを作成しようとしています。
これが私がこれまでに持っているものです:
クエリ:
SELECT dbo.[User].FirstName, dbo.[User].LastName,
dbo.[Region].UserRowId AS RegManager, dbo.[Region].RegionDesc AS Desc,
SUM(dbo.[UserTime].Sales) AS Sales, SUM(dbo.[UserTime].Hours) AS Hours
FROM dbo.[UserTime]
INNER JOIN dbo.[User] ON dbo.[UserTime].UserRowid = dbo.[User].UserRowId
INNER JOIN dbo.[Region] ON dbo.[User].RegionRowId = dbo.[Region].RegionRowId
WHERE dbo.[User].Active = 1
GROUP BY dbo.[User].FirstName, dbo.[User].LastName,
dbo.[Region].UserRowId, dbo.[Region].RegionDesc
出力 (例):
FirstName LastName RegManager RegionDesc Sales Hours
Bob Man 773 NYC 500 5
私が問題を抱えているのは:
UserRowId の代わりに、地域マネージャーの LastName (上記の出力の RegManager 列) を取得することは (私の人生では) できません。私は自分のクエリで dbo.[Region].UserRowId をプルしていることを知っているので、明らかにそれが出力に表示されます。ただし、その ID を使用して User テーブルを相互参照し、そのマネージャーの名前を取得する必要があります。
UserRowId でユーザー テーブルと地域テーブルを結合しようとすると、ユーザーのリストではなく地域マネージャーのリストと、そのユーザーの地域マネージャーの列が取得されます。
これを達成するためにそこにサブクエリが必要ですか?
解決策を得るために何かを明確にする必要がある場合はお知らせください。
ありがとうございました