gpt4 book ai didi

sql-server - 交叉应用以从 SQL Server 中的 Xml 获取子父值

转载 作者:行者123 更新时间:2023-12-03 11:15:29 26 4
gpt4 key购买 nike

我有以下 XML:

<root>
<row value="US">
<col value="00">Jon</col>
<col value="01">David</col>
<col value="02">Mike</col>
<col value="03">Nil</col>
</row>
<row value="Canada">
<col value="C1">Pollard</col>
</row>
<row value="Japan">
<col value="J1">Yin</col>
<col value="J2">Li</col>
</row>
<row value="India">
<col value="MP">Ram</col>
<col value="UP">Paresh</col>
<col value="AP">Mohan</col>
</row>
</root>

我希望使用 SQL Server 查询获得以下输出:
US  00  Jon
US 01 David
US 02 Mike
US 03 Nil
Canada C1 Pollard
Japan J1 Yin
Japan J2 Li
India MP Ram
India UP Paresh
India AP Mohan

我正在使用以下 SQL 查询:
declare @x xml
set @x =
'<root>
<row value="US">
<col value="00">Jon</col>
<col value="01">David</col>
<col value="02">Mike</col>
<col value="03">Nil</col>
</row>
<row value="Canada">
<col value="C1">Pollard</col>
</row>
<row value="Japan">
<col value="J1">Yin</col>
<col value="J2">Li</col>
</row>
<row value="India">
<col value="MP">Ram</col>
<col value="UP">Paresh</col>
<col value="AP">Mohan</col>
</row>
</root>'

select r.value('@value','varchar(100)'),r.value('.','varchar(100)')
from @x.nodes('root') as m(c)
cross apply m.c.nodes('row/col') as x(r)

我无法获得包含父行值的第一列。
您能否建议我可以进行哪些更改以获得第一列值?

最佳答案

尝试这个:

select 
ParentValue = c.value('(../@value)[1]', 'varchar(100)'),
ValueAttr = c.value('@value','varchar(100)'),
ColValue = c.value('.','varchar(100)')
from
@x.nodes('/root/row/col') as m(c)

基本上,真的没有必要使用 CROSS APPLY完全 - 只需选择 /root/row/col来自 .nodes() 的节点调用并使用 ../@value获取 value父节点上的属性( <row> 元素)

关于sql-server - 交叉应用以从 SQL Server 中的 Xml 获取子父值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com