2013-07-21 83 views
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 

感谢所有回复

+0

的数据库您使用的演示? –

+0

它是Sql server 2012 –

+0

输出中的“B2”和“A2”在哪里? – peterm

回答

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 

输出:

 
|  NAME | 
------------ 
|  A | 
|  B | 
|  A.A1 | 
|  A.A2 | 
|  B.B1 | 
|  B.B2 | 
| B.B1.B11 | 

这里是SQLFiddle

+0

非常感谢你,这是拯救我的生命:) –

+0

非常欢迎。祝你好运 :) – peterm

相关问题