使用SQL + XQuery将Xml转换为基于列的数据

时间:2012-07-22 02:12:31

标签: sql xml tsql xpath xquery

我的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

2 个答案:

答案 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