gpt4 book ai didi

sql - 如何从用户 ID 获取用户名(SQL 连接)

转载 作者:行者123 更新时间:2023-12-01 12:48:08 25 4
gpt4 key购买 nike

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

我有一个名为“用户”的表,其中包含以下列:

UserRowId (PK)
FirstName
LastName
RegionRowId (FK)
Active

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

RegionRowId
RegionDesc
UserRowId

这里的逻辑是,一个用户属于一个“Region”,由 User 表中的 RegionRowId 记录。每个区域(在“区域”表中)都有一个区域经理,由“区域”表中的“UserRowId”列记录(来自“用户”表的外键)。

我有一个名为“UserTime”的表,其中包含以下列:

UserTimeRowId (PK)
UserRowId (FK)
Hours
Sales

这里的逻辑是用户(由 UserRowId 映射)报告存储在该表中的小时数和销售额。每次用户报告销售额/小时时,都会创建一个新行。

我想要完成的事情:

我正在尝试编写一个查询,以获取该用户的名字、姓氏、区域经理、工作时间总和以及销售额总和。

这是我目前所拥有的:

查询:

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

我遇到的问题是:

我无法(终生)获取区域经理的姓氏(上面输出中的 RegManager 列)而不是 UserRowId。我知道在我的查询中我正在拉 dbo.[Region].UserRowId 很明显这就是我将在输出中得到的。但是,我需要的是使用该 ID 交叉引用用户表以提取该经理的姓名。

当我尝试通过 UserRowId 连接用户表和区域表时,我得到了区域经理列表而不是用户列表,以及该用户的区域经理列。

我需要一个子查询来完成这个吗?

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

谢谢

最佳答案

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

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

关于sql - 如何从用户 ID 获取用户名(SQL 连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com