如果另一列中的值对应于所需名称的主键,如何检索列中的名称

How to retrieve names within a column if values in another column corresponds to the primary key of desired name

我在 t-sql 中有一个 table,看起来像这样

personid | firstname | lastname | managerid
1        | Tom       | Bricks   | null
2        | Joe       | Liam     | 1
3        | Mary      | Hattan   | 2

我正在尝试这样查询 table:

Name | ManagerName
Tom  | No manager
Joe  | Tom
Mary | Joe

我似乎无法弄清楚如何从我的查询中查询第二列,因为它现在是这样的:

SELECT 'firstname' + ' ' + 'lastname' AS 'Name

有人知道吗?

您可以使用 Self Join 在同一 table 上使用两列 link 来获取数据。

试试这个

   SELECT t1.firstname as Name, ISNULL(t2.firstname,'No manager') as ManagerName
   FROM   tblName t1 
       LEFT JOIN tblName t2 
       ON t1.managerid = t2.personid  

DEMO

你可以通过递归 CTE 做到这一点:

DECLARE @t TABLE
    (
      personid INT ,
      firstname NVARCHAR(MAX) ,
      lastname NVARCHAR(MAX) ,
      managerid INT
    )

INSERT  INTO @t
VALUES  ( 1, 'Tom', 'Bricks', NULL ),
        ( 2, 'Joe', 'Liam', 1 ),
        ( 3, 'Mary', 'Hattan', 2 );
WITH    cte
          AS ( SELECT   personid ,
                        firstname ,
                        lastname ,
                        managerid
               FROM     @t
               WHERE    ManagerID IS NULL
               UNION ALL
               SELECT   t.personid ,
                        t.firstname ,
                        t.lastname ,
                        t.managerid
               FROM     @t t
                        INNER JOIN cte ecte ON ecte.personid = t.ManagerID
             )
    SELECT  *
    FROM    cte
GO

输出:

personid    firstname   lastname    managerid
1   Tom Bricks  NULL
2   Joe Liam    1
3   Mary    Hattan  2