是这样吗:--drop table test
create table test(
   id int primary key,
   name varchar(10),
   pid int--父级ID
);insert into test values (1,'张三',1);
insert into test values (2,'李四',1);
insert into test values (3,'王五',2);
insert into test values (4,'小罗',3);
insert into test values (5,'周哥',4);
go
select t1.id,
       t1.name 姓名,
       t2.name  as  直属父级姓名from test t1
left join test t2
       on t1.pid = t2.id
/*
id 姓名 直属父级姓名
1 张三 张三
2 李四 张三
3 王五 李四
4 小罗 王五
5 周哥 小罗
*/       

解决方案 »

  1.   

    --create table test(
    --   id int primary key,
    --   name varchar(10),
    --   pid int--父级ID
    --);--insert into test values (1,'张三',1);
    --insert into test values (2,'李四',1);
    --insert into test values (3,'王五',2);
    --insert into test values (4,'小罗',3);
    --insert into test values (5,'周哥',4);;WITH cte AS (
    SELECT * ,name AS Fname
    FROM test
    WHERE id=pid
    UNION ALL 
    SELECT a.id,a.NAME,a.pid,b.NAME AS Fname
    FROM test a INNER JOIN cte b ON a.pid=b.id
    WHERE a.id<>a.pid
    )
    SELECT id,name,Fname
    FROM cte/*
    id          name       Fname
    ----------- ---------- ----------
    1           张三         张三
    2           李四         张三
    3           王五         李四
    4           小罗         王五
    5           周哥         小罗*/
      

  2.   

    SELECT T.ID,T.NAME,T1.NAME test T LEFT JOIN test T1 ON T.ID=T1.pid