尝试引用另一列,以使用联接用匹配数据填充新列

问题描述 投票:0回答:2

对不起,我对此还很陌生,所以我可能会遗漏一些相当简单的东西。我的问题是,如何将队长的姓名提取到新的列中以匹配球队(即戴维·富尼尔和马林鱼)?我觉得自己通过自我加入错过了一些非常简单的事情。任何帮助将不胜感激。

这是我的第一个查询...

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
sql sql-server self-join
2个回答
0
投票

似乎您可以通过条件聚合和带窗口的功能来做到这一点:

MAX(CASE WHEN T.CaptainID = B.BowlerID THEN CONCAT(B.BowlerFirstName,'  ',B.BowlerLastName) END) OVER (PARTITION BY T.TeamID)

0
投票

您可以再加入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中,最好使用方括号([])引用标识符;单引号通常保留给字符串垃圾。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.