尝试引用另一列以使用连接填充具有匹配数据的新列

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服务器中,最好使用方括号([])来引用标识符;单引号通常保留给字符串。