我们的服务台软件在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值之外,表中没有父/子关系。不幸的是,我无法改变这张桌子。