自联接表生成输出MSSQL

时间:2018-03-15 15:47:17

标签: sql-server join self

请你帮忙从下面的输入表中生成输出表(提供截图。基本上我需要根据每行中的pid从cn中获取pcn。我使用了一个case语句,但数据是巨大而且它不是一种可持续的方式,因此自我加入会很好。但我没有从下面的自联接查询获得预期的输出

这是我尝试过的自联接查询。

select b.id, b.cn, a.pid, a.cn as pcn 
from ( 
   (select pid,cn from categories) a 
   left join (select id,cn from categories) b on a.pid=b.id 
) 

以下是我用于获取某些数据的数据的案例陈述

select id,cn,pid,
       case 
          when pid is NULL then cn 
          when pid=1 then (select cn from categories where id=1) 
          when pid=13 then (select cn from categories where id=13) 
       END as pcn 
from categories

inputtable

outputtable

3 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

SELECT i.id, i.cn, i.pid, c.cn
FROM inputTable i
    LEFT OUTER JOIN categories c ON (i.pid = c.id)

答案 1 :(得分:0)

select
  i.id,
  i.cn,
  i.pid,
  i2.cn as pcn
from input_table i
  left join input_table i2
    on i.pid=i2.id

答案 2 :(得分:0)

以下查询可以给我确切的预期结果。谢谢Jaime,jhilden和a_horse_with_no_name选择
i.id,i.cn,
i.pid,当i.pid为null然后i.cn其他i2.cn结束为pcn
的情况 FROM inputtable i LEFT OUTER JOIN inputtable i2 ON(i.pid = i2.id)