对不起,我对此还很陌生,所以我可能会遗漏一些相当简单的东西。我的问题是,如何将队长的姓名提取到新的列中以匹配球队(即戴维·富尼尔和马林鱼)?我觉得自己通过自我加入错过了一些非常简单的事情。任何帮助将不胜感激。
这是我的第一个查询...
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 Server中,最好使用方括号([]
)引用标识符;单引号通常保留给字符串垃圾。