Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何构造此三级层次结构查询,_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如何构造此三级层次结构查询,

Sql 如何构造此三级层次结构查询,,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个设想 我有如下sql server表结构 ID CodeLevel ParentID Name ----------- ----------- ----------- -------------------------------------------------- 1 1 NULL Company Group 40 2 1

我有一个设想

我有如下sql server表结构

ID          CodeLevel   ParentID    Name
    ----------- ----------- ----------- --------------------------------------------------
    1           1           NULL        Company Group
    40          2           1           Corp Fun
    41          3           40          Fin
    45          4           41          Cont
    48          4           41          CFO
    51          4           41          Inv Rel
    52          4           41          CTandC
    94          3           40          COffice
    95          4           94          CEOffice
我正在寻找一个查询,以获得业务单位,业务部门和业务组。例:CodeLevel=4是所有业务单元

现在,对于ID=95,名称是CEOfffice。CEOffice是一个业务单元

对于ID=95,ParentID为94。对于ID=94,名称为COFfice,即业务部门

对于ID=94,其专利为40。所以,ID=40,名字是Corp-Fun,它是一个商业团体

因此,当ID=51时:

  • 业务单位为Inv Rel
  • 业务部门是财务部
  • 商业团体很有趣
请帮我写下这个问题的答案。谢谢

只要两次

select base.ID, base.Name, div.Name, grp.Nave
  from table as base 
  join table as div 
    on div.ID = base.parentID
   and base.ID = 51
  join table as grp
    on grp.ID = div.parentID 

如果它总是高达3个级别,并且没有更多级别,那么您可以使用from子句将同一个表连接到另外2次,这样您就有了它。如果可以大于3,则需要考虑使用forxml路径或CTE执行层次结构所需的递归查询。向我们展示你的尝试,我们可能会提供帮助。