2015-10-15 82 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

太棒了。在過去的一個小時裏,我嘗試了所有的事情,一次又一次地失敗。謝謝。 –