繁体   English   中英

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

[英]Xml to column based data using SQL + 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

采用:

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

或使用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 

暂无
暂无

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

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