2015-10-15 52 views
1

考虑以下输入:连接字符串值

ID 
-------- 
33 
272 
317 
318 

我需要以某种方式得到以下结果:

Result 
-------- 
/33 
/33/272 
/33/272/317 
/33/272/317/318 

怎么能我一个SELECT语句实现这一目标?

+0

什么决定的顺序? –

+0

行序列确定顺序。因此,我可以使用ROW_NUMBER OVER(SELECT NULL)来排序这些行... –

+0

表具有** no **固有顺序。 'ROW_NUMBER OVER(SELECT NULL)'是一种复杂的告诉系统的方式:“我不关心*你在做什么的次序” –

回答

3

使用CROSS APPLYFOR XML PATH()

;WITH Cte AS(
    SELECT *, 
     RN = ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) 
    FROM tbl 
) 
SELECT * 
FROM Cte c 
CROSS APPLY(
    SELECT '/' + CONVERT(VARCHAR(10), ID) 
    FROM Cte 
    WHERE rn <= c.rn 
    FOR XML PATH('') 
)x(s) 
+0

太棒了。在过去的一个小时里,我尝试了所有的事情,一次又一次地失败。谢谢。 –