递归sql从pair / relationship表创建树结构

时间:2014-04-10 17:19:35

标签: sql sql-server recursion common-table-expression

我们的服务台软件在MS-SQL 2008中有一个表,用于跟踪网络中项目之间的关系。

我正在尝试创建一个报告,一个树视图,可以在多个级别上显示我们网络中的哪些项目,需要某个项目。

该表格有以下字段:

| pair_id | item_id   | rel_type_id  | 
|---------|-----------|--------------|
|    1    |    1      |      27      |
|    1    |    3      |      28      | 
|    2    |    1      |      27      |
|    2    |    2      |      28      | 
|    3    |    2      |      27      |
|    3    |    4      |      28      | 
|    4    |    2      |      27      |
|    4    |    5      |      28      | 

其中rel_type_id是:

 28 = depends on 
 27 = needed by

即。 App01需要Server01,这是App01_web所需要的,最终结果如下:

 1 (Server01)
  +--2 (App01)
     +--4 (App01_web)
     +--5 (App01_console)
  +--3 (db01)

依旧......

有没有办法递归地解析(即CTE)以找到所有项目 取决于该表中的第1项(Server01)?

想要的输出是一个看起来像这样的表:

| parent_id | item_id | item_name     | level |
|-----------|---------|---------------|-------|
|     1     |    2    |    App01      |   0   | 
|     1     |    3    |    db01       |   0   |
|     2     |    4    | App01_web     |   1   |
|     2     |    5    | App01_console |   1   |

我在这里尝试了几个CTE示例,但我无法让它们与此表一起正常工作。我怀疑是因为除了rel_type_id值之外,表中没有父/子关系。不幸的是,我无法改变这张桌子。

0 个答案:

没有答案