2011-07-26 40 views
1

如何使用CROSS APPLYFOR XML來標準化包含信息列表的表格?如何使用CROSS APPLY XML PATH

Product Orderid 
P1  1,2,3 
P2  1,3 
P3  1 

應該歸像下面

P1 1 
P1 2 
P1 3 
P2 1 
P2 3 
P3 1 

我認爲它可以與CROSS APPLY FOR XML完成。還有其他的方式嗎?

+0

很多在這個問題上可能相關的信息的:http://stackoverflow.com/questions/697519/split-function-equivalent-in-tsql –

+0

@邁克爾:感謝您的編輯。你讓它變得有意義。 Tanq – Shine

回答

1

這是測試工作:

SELECT * INTO #T 
FROM (
    SELECT 'P1' Product, '1,2,3' OrderId 
    UNION SELECT 'P2', '1,3' 
    UNION SELECT 'P3', '1') x; 

WITH S AS (
    SELECT product, x.t 
    FROM #T cross apply 
     (select convert(xml, N'<root><r>' + replace(orderid,',','</r><r>') + '</r></root>') t) x 
) 
SELECT s.Product, r.value('.', 'int') OrderId 
FROM s cross apply t.nodes('//root/r') as records(r); 

DROP TABLE #T;