【发布时间】:2019-06-26 16:15:20
【问题描述】:
我有以下 xml。如何在遇到新的 cond-id 而不创建重复行之前保留每个 cond-id 的值并将其应用于每个后续的价格容器元素。
我已经尝试了几件事,这是我最接近的。
declare @xml xml =
'-<module mod-id="333">
<title>NNN NNNNN NNNNN</title>
-<data-code>
<code-id>333-004</code-id>
<description>XXX XXX XXXXXXXX XXX X XXXXXXXXXXXXXXXX</description>
-<applic>
-<p32>
-<condition cond-id="o-000008888">
<ctext> NNN NNNNNNNNN NN NNNNN NNNNNNNNN NN</ctext>
</condition>
-<m234 domicile="all" ver-start="4.40" target-ver="4.40" vocation="all">
-<value>
<price-container pwdb-id="p-000121212">267</price-container>
<weight-container pwdb-id="w-000676767">0/40</weight-container>
</value>
</m234>
</p32>
</applic>
</data-code>
-<data-code>
<code-id>333-005</code-id>
<description>NNNNNNNNNNNNN NNNNNNNNNN NNNNN N NNNN N NNN NNNNNNNN</description>
-<applic>
-<p32>
-<condition cond-id="o-000002222">
<ctext> NNNNNN NNNNN XXXX NNNN XXXX NNNNNNNN XXXXXXXX </ctext>
</condition>
-<m234 domicile="all" ver-start="4.40" target-ver="4.40" vocation="all">
-<value>
<price-container pwdb-id="p-000123456">N/C</price-container>
<weight-container pwdb-id="w-000234567">0/0</weight-container>
</value>
</m234>
-<condition cond-id="o-000033333">
<ctext> Price with DC 622-005 , DC 622-197, , and DC 622-292 </ctext>
</condition>
-<m234 domicile="all" ver-start="4.80" target-ver="4.80" vocation="all">
-<value>
<price-container pwdb-id="p-000456789">99999</price-container>
<weight-container pwdb-id="w-000789012">0/0</weight-container>
</value>
</m234>
</p32>
</applic>
</data-code>
</module>'
select
price.value('(../../../../../code-id)[1]', 'varchar(50)') as data_code,
price.value('@pwdb-id', 'varchar(50)') as pwdb_id,
price.value('(text())[1]', 'varchar(50)') as text,
cond.value('(@cond-id) [1]', 'varchar(50)') as cond_id
from @xml.nodes('/module/data-code/applic/p32') as Xtble(datanode)
cross apply Xtble.datanode.nodes('m234/value/price-container') as Xtble2(price)
outer apply Xtble.datanode.nodes('condition') as Xtble3(cond)
这就是我得到的
data_code pwdb_id text cond_id
333-004 p-000121212 267 o-000008888
333-005 p-000123456 N/C o-000002222
333-005 p-000456789 99999 o-000002222
333-005 p-000123456 N/C o-000033333
333-005 p-000456789 99999 o-000033333
这就是我想要的
data_code pwdb_id text cond_id
333-004 p-000121212 267 o-000008888
333-005 p-000123456 N/C o-000002222
333-005 p-000456789 99999 o-000033333
【问题讨论】:
-
您的 XML 中真的有那些减号,还是只是从 Internet Explorer 复制/粘贴引入的工件?
标签: sql-server xml tsql