尝试引用另一列以使用连接填充具有匹配数据的新列
Trying to reference another column to fill in a new column with matching data using joins
抱歉,我还是新手,所以我可能遗漏了一些相当简单的东西。我的问题是,如何将船长的名字提取到新列中以匹配球队(即 David Fournier 和 Marlins)?我觉得我错过了一些很简单的自我加入。任何帮助将不胜感激。
这是我的第一个查询...
SELECT
b.BowlerID,
concat (b.BowlerFirstName,' ',b.BowlerLastName) 'Bowler's Name',
t.TeamName,
t.CaptainID
FROM Bowlers as b
INNER JOIN Teams as t ON b.TeamID = t.TeamID
结果是这样的...
BowlerID Bowler's Name TeamName CaptainID
1 Barbara Fournier Marlins 2
2 David Fournier Marlins 2
3 John Kennedy Marlins 2
4 Sara Sheskey Marlins 2
5 Ann Patterson Sharks 5
6 Neil Patterson Sharks 5
7 David Viescas Sharks 5
8 Stephanie Viescas Sharks 5
还有另一个查询 运行...
SELECT
b.BowlerID,
concat (b.BowlerFirstName,' ',b.BowlerLastName) 'Team Captain',
t.TeamName
FROM Bowlers as b
INNER JOIN Teams as t ON b.BowlerID = t.CaptainID
给我这个...
BowlerID Team Captain TeamName
2 David Fournier Marlins
5 Ann Patterson Sharks
看来您可以使用条件聚合和窗口函数来做到这一点:
MAX(
CASE WHEN T.CaptainID = B.BowlerID
THEN CONCAT(B.BowlerFirstName,' ',B.BowlerLastName)
END
) OVER (PARTITION BY T.TeamID)
你可以加入Bowlers
一次获得队长名字:
SELECT
b.BowlerID,
CONCAT(b.BowlerFirstName, ' ', b.BowlerLastName) [Bowler Name],
t.TeamName,
t.CaptainID,
CONCAT(c.BowlerFirstName, ' ', c.BowlerLastName) [Captain Name]
FROM Bowlers as b
INNER JOIN Teams as t ON b.TeamID = t.TeamID
INNER JOIN Bowlers as c ON c.BowlerID = t.CaptainID
注意:在SQL服务器中,最好使用方括号([]
)来引用标识符;单引号通常保留给字符串。
抱歉,我还是新手,所以我可能遗漏了一些相当简单的东西。我的问题是,如何将船长的名字提取到新列中以匹配球队(即 David Fournier 和 Marlins)?我觉得我错过了一些很简单的自我加入。任何帮助将不胜感激。
这是我的第一个查询...
SELECT
b.BowlerID,
concat (b.BowlerFirstName,' ',b.BowlerLastName) 'Bowler's Name',
t.TeamName,
t.CaptainID
FROM Bowlers as b
INNER JOIN Teams as t ON b.TeamID = t.TeamID
结果是这样的...
BowlerID Bowler's Name TeamName CaptainID
1 Barbara Fournier Marlins 2
2 David Fournier Marlins 2
3 John Kennedy Marlins 2
4 Sara Sheskey Marlins 2
5 Ann Patterson Sharks 5
6 Neil Patterson Sharks 5
7 David Viescas Sharks 5
8 Stephanie Viescas Sharks 5
还有另一个查询 运行...
SELECT
b.BowlerID,
concat (b.BowlerFirstName,' ',b.BowlerLastName) 'Team Captain',
t.TeamName
FROM Bowlers as b
INNER JOIN Teams as t ON b.BowlerID = t.CaptainID
给我这个...
BowlerID Team Captain TeamName
2 David Fournier Marlins
5 Ann Patterson Sharks
看来您可以使用条件聚合和窗口函数来做到这一点:
MAX(
CASE WHEN T.CaptainID = B.BowlerID
THEN CONCAT(B.BowlerFirstName,' ',B.BowlerLastName)
END
) OVER (PARTITION BY T.TeamID)
你可以加入Bowlers
一次获得队长名字:
SELECT
b.BowlerID,
CONCAT(b.BowlerFirstName, ' ', b.BowlerLastName) [Bowler Name],
t.TeamName,
t.CaptainID,
CONCAT(c.BowlerFirstName, ' ', c.BowlerLastName) [Captain Name]
FROM Bowlers as b
INNER JOIN Teams as t ON b.TeamID = t.TeamID
INNER JOIN Bowlers as c ON c.BowlerID = t.CaptainID
注意:在SQL服务器中,最好使用方括号([]
)来引用标识符;单引号通常保留给字符串。