繁体   English   中英

T-SQL XQuery,用于为每个嵌套元素的每个匹配XML值返回结果行

[英]T-SQL XQuery for returning a result row per matching XML value for each nested element

给定表y中的XML数据类型列x,其值如下:

<a>
<b>
<c>1</c>
<c>2</c>
<c>3</c>
</b>
</a>

如何使用T-SQL XQuery获取结果集,以便每个<c>元素值返回一行? 假设表y也有列z,其中包含x列中<c>元素的数量 - 只是因此我们还有一个要返回的列。

到目前为止我们能想到的最好的是:

select 
z, 
cvalues = x.query('data(a/b/c)')
from y

但是,上面将在y中每行返回一行,并且在列cvalues中的<c>元素的值的空格分隔列表中。

我们如何得到一个结果集,如:

z cvalues
3 1
3 2
3 3

而不是我们现在得到的:

z cvalues
3 1 2 3 

谢谢!

您可以将CROSS APPLYnodes结合使用:

SELECT 
  z, 
  cvalues = s.c.value('.', 'int')
FROM y
CROSS APPLY x.nodes('//c') AS s(c);

LiveDemo

输出:

╔═══╦═════════╗
║ z ║ cvalues ║
╠═══╬═════════╣
║ 3 ║       1 ║
║ 3 ║       2 ║
║ 3 ║       3 ║
╚═══╩═════════╝

请记住:

//c匹配所有c xml元素,无论它在层次结构中的位置

/a/b/c将匹配嵌套在ab中的c xml元素

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM