[英]How to use CROSS APPLY XML PATH
How can I use CROSS APPLY
and FOR XML
to normalise the table which contains a list for informartion? 如何使用
CROSS APPLY
和FOR XML
规范化包含信息列表的表?
Product Orderid
P1 1,2,3
P2 1,3
P3 1
It should be normalised like below 应该像下面这样规范化
P1 1
P1 2
P1 3
P2 1
P2 3
P3 1
I think it can be done with CROSS APPLY FOR XML
. 我认为可以使用
CROSS APPLY FOR XML
来完成。 Is there any other way of doing it? 还有其他方法吗?
This is tested and working: 经过测试并可以正常工作:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.