如何从其ID(SQL连接)获取用户的名称

时间:2013-01-03 15:01:30

标签: sql sql-server-2008

很难获得这个问题的好标题,但我将在下面详细解释。我将简化这些表格以使问题更容易提出。

我有一个名为'User'的表,其中包含以下列:

UserRowId (PK)
FirstName
LastName
RegionRowId (FK)
Active

我有一个名为'Region'的表,其中包含以下列:

RegionRowId
RegionDesc
UserRowId

这里的逻辑是,用户属于“Region”,由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

我遇到的问题是:

我不能(在我的生活中)获取区域管理器的LastName(上面输出中的RegManager列)而不是UserRowId。我知道在我的查询中我正在拉dbo。[Region] .UserRowId显然这就是我在输出中得到的东西。但是,我需要的是使用该ID交叉引用User表以提取该管理器的名称。

当我尝试通过UserRowId加入用户表和区域表时,我得到一个区域管理器列表而不是用户列表,以及该用户的区域管理器列。

我是否需要一个子查询才能完成此任务?

感谢任何帮助,如果我需要澄清任何问题以获得解决方案,请告诉我。

谢谢

2 个答案:

答案 0 :(得分:2)

您不需要子查询,但需要使用别名,以便可以多次加入同一个表(在本例中为用户表),而不会产生歧义。

SELECT u.FirstName, u.LastName,
m.FirstName AS RegManagerFirstName, m.LastName AS RegManagerLastName, r.RegionDesc AS [Desc],
SUM(ut.Sales) AS Sales, SUM(ut.Hours) AS Hours
FROM dbo.[UserTime] AS ut
INNER JOIN dbo.[User] AS u ON ut.UserRowid = u.UserRowId
INNER JOIN dbo.[Region] AS r ON u.RegionRowId = r.RegionRowId
INNER JOIN dbo.[User] AS m ON r.UserRowid = m.UserRowId
WHERE u.Active = 1
GROUP BY u.FirstName, u.LastName, m.FirstName, m.LastName, r.RegionDesc

答案 1 :(得分:2)

您需要做的是使用User表中的UserRowId再次加入Region表,并将其别名,以便它可以与另一个{{1}分开引用它1}}你加入的表:

User