1

对不起,我的英语不好。我有一张桌子:

ID            Name            Container

1             A               0
2             B               0
3             A1              1
4             A2              1
5             B1              2
6             B2              2
7             B11             5

我可以得到所有的价值:

A
B
A.A1
A.A2
B.B1
B.B2
B.B1.B11

谢谢大家的回复

4

1 回答 1

2

你需要一个递归 CTE

WITH cte AS
(
  SELECT id, CAST(name AS VARCHAR(MAX)) name, container 
    FROM Table1 
   WHERE container = 0
   UNION ALL
  SELECT t.id, CAST(p.name + '.' + t.name AS VARCHAR(MAX)), t.container
    FROM Table1 t JOIN cte p
      ON p.id = t.container
)
SELECT name 
  FROM cte 
 ORDER BY id

输出:

| 姓名 |
------------
| 一个 |
| 乙|
| A.A1 |
| A.A2 |
| B.B1 |
| B.B2 |
| B.B1.B11 |

这是SQLFiddle演示

于 2013-07-21T07:34:09.847 回答