Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server sql-显示祖父母、父母和子女_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server sql-显示祖父母、父母和子女

Sql server sql-显示祖父母、父母和子女,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在尝试创建一个视图,它将返回一个由3个级别的数据组成的字符串 select bf.functionName + ' \ ' + ISNULL(bf1.functionName + ' \ ', '') + ISNULL(bf2.functionName, '') from tblBusinessFunction bf inner join tblBusinessFunction bf1 on bf1.parentID = bf.id and bf.level = 0 inner join t

我正在尝试创建一个视图,它将返回一个由3个级别的数据组成的字符串

select bf.functionName + ' \ ' + ISNULL(bf1.functionName + ' \ ', '') + ISNULL(bf2.functionName, '') from tblBusinessFunction bf
inner join tblBusinessFunction bf1 on bf1.parentID = bf.id and bf.level = 0
inner join tblBusinessFunction bf2 on bf2.parentID = bf1.id and bf1.level = 1
以上仅返回顶级祖父母和父母,而不返回子级

这就是这张桌子的样子

| id   | functionName                | parentID |  level  |
|:-----|----------------------------:|:--------:|:-------:|
| 101  | Portfolio Strategy Functions|   NULL   |    0    |
| 110  | Research                    |   101    |    1    |
| 111  | Economic Forecasting        |   110    |    2    |
现在我的查询将返回
投资组合策略函数\Research\Economic forecast
,但我希望它也返回
投资组合策略函数\Research
,但它不返回。

我试图解决这个问题

declare @T table ( id int, functionName varchar(50), parentid int, level int )

insert @T 
values 
(101,'Portfolio Strategy Functions',null,0),
(110,'Research',101,1),
(111,'Economic Forecasting',110,2)

;with Outline as
( select id,level,functionName = convert(varchar(max),functionName) from @T where level = 0 
  union all 
  select T.ID, T.level, functionName = O.functionName +' / '+ T.functionName from @T T
  join Outline O on O.id = T.parentid
)

select * from OutLine
where level > 0
这就是结果

(3 row(s) affected)
id          level       functionName
----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
110         1           Portfolio Strategy Functions / Research
111         2           Portfolio Strategy Functions / Research / Economic Forecasting

(2 row(s) affected)
我试图解决这个问题

declare @T table ( id int, functionName varchar(50), parentid int, level int )

insert @T 
values 
(101,'Portfolio Strategy Functions',null,0),
(110,'Research',101,1),
(111,'Economic Forecasting',110,2)

;with Outline as
( select id,level,functionName = convert(varchar(max),functionName) from @T where level = 0 
  union all 
  select T.ID, T.level, functionName = O.functionName +' / '+ T.functionName from @T T
  join Outline O on O.id = T.parentid
)

select * from OutLine
where level > 0
这就是结果

(3 row(s) affected)
id          level       functionName
----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
110         1           Portfolio Strategy Functions / Research
111         2           Portfolio Strategy Functions / Research / Economic Forecasting

(2 row(s) affected)

这是一个很好的起点。切换到
left join
s。请看一下Recorsive CTE。在示例数据中,我看不到任何名为
级别
的字段。@Giorgosbetos我用级别进行了更新,很抱歉我错过了这一部分。这里是一个很好的起点。切换到
left join
s。请看一下Recorsive CTE。在示例数据中,我看不到任何名为
level
的字段。@Giorgosbetos我更新了该级别。很抱歉,我错过了该部分。谢谢!这是一个临时查询。这将帮助我理解如何做不幸的是,我不能用它来生成一个视图,但这是一个单独的问题。谢谢!这是一个临时查询。这将帮助我理解如何做不幸的是,我不能用它来生成一个视图,但这是一个单独的问题。