我的xml类型列中有以下xml(xml本身是未键入的)
<wi>
<w wid="16">
<p>28</p>
<p>72</p>
<p>125</p>
</w>
<w wid="19">
<p>89</p>
</w>
<w wid="20">
<p>11</p>
</w>
<w wid="21">
<p>74</p>
</w>
</wi>
无法弄清楚如何使用SQL + XQuery生成两列:
p w
--- ---
11 20
28 16
72 16
74 21
89 19
125 16
答案 0 :(得分:2)
使用:
declare @x xml = '<wi>
<w wid="16">
<p>28</p>
<p>72</p>
<p>125</p>
</w>
<w wid="19">
<p>89</p>
</w>
<w wid="20">
<p>11</p>
</w>
<w wid="21">
<p>74</p>
</w>
</wi>'
select *
from
(
select t.c.value('.', 'int') p
, t.c.value('../@wid', 'int') w
from @x.nodes('//p') t(c)
)t
order by p, w
答案 1 :(得分:2)
使用cross apply
的其他方法:
select *
from
(
select a.b.value('.', 'int') p
, t.c.value('@wid', 'int') w
from @x.nodes('//w') t(c)
cross apply t.c.nodes('p') a(b)
)t
order by p, w