微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XQUERY -SQL 检索子 ID 和父 ID 的列表

如何解决XQUERY -SQL 检索子 ID 和父 ID 的列表

如何查询 xml 以获得以下结果?我对使用 XQuery 完全陌生。

XML 示例:

<dec>
    <asi idAsig="1">
        <asiA  A_1="1" A_2="0" A_3="N" A_4="8" A_5="1589" A_6="160"/>
        <asiE1 E1_1="2569" E1_2="2569" E1_3="0" E1_4="0" E1_5="0"/>
    </asi>
    <asi  idAsig="2" >
        <asiA  A_1="1" A_2="0" A_3="N" A_4="8" A_5="7175" A_6="160"/>
        <asiB1 B1_1="1" B1_2="0" B1_3="N" B1_4="8" B1_5="4848"/>
        <asiB1 B1_1="52" B1_2="0" B1_3="N" B1_4="8" B1_5="625"/>
        <asiE1 E1_1="7175" E1_2="2512" E1_3="0" E1_4="0" E1_5="0"/>
    </asi>
    <asi idAsig="3" >
        <asiA  A_1="3" A_2="3" A_3="Y" A_4="10" A_5="585" A_6="160"/>
        <asiB1 B1_1="1" B1_2="0" B1_3="N" B1_4="8" B1_5="589"/>
        <asiB1 B1_1="39" B1_2="0" B1_3="N" B1_4="8" B1_5="15647"/>
        <asiE1 E1_1="7175" E1_2="2512" E1_3="0" E1_4="0" E1_5="0"/>
    </asi>
</dec>

结果:

idAsig B1_1 B1_2 B1_3 B1_4 B1_5
1 NULL NULL NULL NULL NULL
2 1 0 N 8 4848
2 52 0 N 8 625
3 1 0 N 8 589
3 39 0 N 8 15647

我试试这个查询

SELECT 
 [idAsig] = Y.A.value('(@idAsig)[1]','INT'),[B1_1] = Y.A.value('(@B1_1)[1]','int'),[B1_2] = e.XMLData.value('(/*:dec/*:asi/*:asiB1/@B1_2)[1]',[B1_3] =  Y.A.value('(@B1_3)[1]','NVARCHAR(MAX)'),[B1_4] =  Y.A.value('(@B1_4)[1]',[B1_5] =  Y.A.value('(@B1_5)[1]','int')

FROM #tmp_XmlData AS e
--OUTER APPLY e.XMLData.nodes('/*:dec/*:asi') AS X(A)
CROSS APPLY e.XMLData.nodes('/*:dec/*:asi/*:asiB1') AS Y(A)

解决方法

您可以在 CROSS APPLY 上使用 e.XMLData.nodes('/*:dec/*:asi') AS X(A),然后在 OUTER APPLY 上使用 X.A.nodes('*:asiB1'),因为您希望所有 asi 元素都出现在查询结果中,而不管它是否有子元素asiB1 与否:

SELECT 
 [idAsig] = X.A.value('(@idAsig)[1]','INT'),[B1_1] = Y.A.value('(@B1_1)[1]','int'),[B1_2] = e.XMLData.value('(/*:dec/*:asi/*:asiB1/@B1_2)[1]',[B1_3] =  Y.A.value('(@B1_3)[1]','NVARCHAR(MAX)'),[B1_4] =  Y.A.value('(@B1_4)[1]',[B1_5] =  Y.A.value('(@B1_5)[1]','int')

FROM tmp_XmlData AS e
CROSS APPLY e.XMLData.nodes('/*:dec/*:asi') AS X(A)
OUTER APPLY X.A.nodes('*:asiB1') AS Y(A)

dbfiddle.uk demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?