如果另一列中的值对应于所需名称的主键,如何检索列中的名称
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
你可以通过递归 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
我在 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
你可以通过递归 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