使用SQL从XML提取相关数据

用户名

在此之前,我还没有问过任何问题,所以请多多包涵。

我需要使用存储在数据库字段中的SQL提取一些XML。我之前从未做过此事,因此在这里我使用了各种不同的问题来解决这个问题。但是,数据的结构方式似乎无法提取我需要的东西。

XML的格式与以下格式相似(我已简化并重命名了标签,无法控制XML或数据库结构)。

<acc>
    <accholder>
        <startdate>10/10/15</startdate>
        <tag>item</tag>
    </accholder>
    <default>
        <bal>123</bal>
    </default>
    <accdetails>
        <balance>400</balance>
    </accdetails>
    <acchistory>
        <ah code="a"/>
        <ah code="b"/>
    </acchistory>
</acc>
<acc>
    <accholder>
        <startdate>01/02/16</startdate>
        <tag>item</tag>
    </accholder>
    <accdetails>
        <balance>50</balance>
    </accdetails>
    <acchistory>
        <ah code="d"/>
        <ah code="b"/>
    </acchistory>
</acc>
<acc>
    <accholder>
        <startdate>09/10/15</startdate>
        <tag>item</tag>
    </accholder>
    <delinquent>
        <bal>123</bal>
    </delinquent>
    <accdetails>
        <balance>90</balance>
    </accdetails>
    <acchistory>
        <ah code="a"/>
        <ah code="s"/>
    </acchistory>
</acc>

基本上,我需要它为每个帐户返回一行,其中包含该帐户的特定详细信息,例如

ACC 1, accholder.startdate, accdetails.balance, acchistory.ah.@code, default.bal (not all have default), delinquent.bal (not all have delinqent)

我用过这种方法

SELECT DISTINCT 
    ID
    , i.c.value(‘(//wf:accholderdetails/wf:starddate/text()[1]’,’varchar(100)’) as startdate
    , i.c.value (‘(//wf:accdetails/wf:balance/text())[1]’,’varchar(100)’) as balance
FROM 
    TABLE T
    CROSS APPLY RESULT.nodes(‘//wf:acc’) as i(c)
WHERE 
    ID = ‘’

它像我想要的那样返回一行相关数据,但仅返回第一行,而不返回其他任何数据行。

然而

SELECT DISTINCT
    ID
    , i.c.value(‘(wf:balance/text())[1]’,’varchar(100)’) as  balance
    ,j.c.value(‘(wf:startdate/text())[1]’,’varchar(100)’) as startdate
FROM 
    TABLE t
    CROSS APPLY RESULT.nodes(‘//wf:accdetails’) as i(c)
    CROSS APPLY RESULT.nodes(‘//wf:accholder’) as j(c)
WHERE 
    ID = ‘’

返回所有数据行,但重复每个项目,因此无法分辨哪些数据与哪个帐户相关。

帮助将不胜感激!如果您需要进一步澄清,请告诉我。先感谢您!

本尼修斯

这应该让您开始

SELECT    
    i.c.query('(./accholder/startdate/text())') as startdate
    ,i.c.query ('(./accdetails/balance/text())') as 'default.bal'
    ,i.c.query ('(./delinquent/bal/text())') as 'delinquent.bal'
    ,COALESCE(convert(varchar(10), i.c.query('data(./acchistory/ah/@code)')),'') as 'acchistory.ah.code'
FROM 
    @myxml.nodes('//acc') as i(c)

它返回:

09/10/15    90  123 a s

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用SQL提取XML数据

来自分类Dev

SQL Server 2014:使用OpenXML和BulkColumn从XML提取数据

来自分类Dev

使用javascript提取XML数据

来自分类Dev

如何使用Jsoup从Android中的多个相关网页提取数据?

来自分类Dev

PostgreSQL:使用xpath从XML列提取数据

来自分类Dev

使用XMLTABLE和xquery从xml提取数据

来自分类Dev

使用XMLTable函数从Xml提取数据

来自分类Dev

使用ElementTree从XML提取数据的麻烦

来自分类Dev

使用PHP simpleXML提取XML数据

来自分类Dev

C#使用Linq从xml提取数据

来自分类Dev

使用Powershell从XML源提取数据

来自分类Dev

使用Python从XML读取/提取数据

来自分类Dev

使用python从xml提取特定数据

来自分类Dev

在Python中使用ElementTree从XML提取数据

来自分类Dev

使用XPath无法从XML文档提取数据

来自分类Dev

无法使用JAVA从网站提取xml数据

来自分类Dev

如何使用xpath或查询从xml提取数据

来自分类Dev

使用 Python 3 从 xml 中提取数据

来自分类Dev

使用Python从xml文件中提取数据

来自分类Dev

使用 python 提取和绘制 XML 数据

来自分类Dev

使用XQuery从SQL中的XML字符串中提取数据

来自分类Dev

使用python解析.xml文件:搜索并复制相关数据

来自分类Dev

使用SQL从字段中提取数值数据

来自分类Dev

使用SQL条件提取定宽数据

来自分类Dev

从邮政地址数据中提取相关属性,以便对这些数据进行PCA(使用R)

来自分类Dev

从SQL Server的XML执行计划中提取数据

来自分类Dev

读取SQL中的XML,不提取任何数据

来自分类Dev

提取与SQL Server中XML数组内的条件匹配的数据

来自分类Dev

读取SQL中的XML,不提取任何数据