xml - T-SQL 和 XML - 将父元素和多个子元素连接到结果集中

标签 xml sql-server-2008 tsql xml-parsing

这是 XML:

<?xml version="1.0" encoding="UTF-16"?>
<Response>
  <Offers>
    <Car>
      <Group>ECMR</Group>
    </Car>
    <Insurances>
      <Optional>
        <Code>BE</Code>
      </Optional>
      <Optional>
        <Code>BF</Code>
      </Optional>
      <Optional>
        <Code>I</Code>
      </Optional>
      <Optional>
        <Code>LD</Code>
      </Optional>
    </Insurances>
  </Offers>
  <Offers>
    <Car>
      <Group>CDMR</Group>
    </Car>
    <Insurances>
      <Optional>
        <Code>BA</Code>
      </Optional>
      <Optional>
        <Code>BG</Code>
      </Optional>
      <Optional>
        <Code>IS</Code>
      </Optional>
      <Optional>
        <Code>LS</Code>
      </Optional>
    </Insurances>
  </Offers>
</Response>

使用此 XML 并在 SQL Server 存储过程中的单个 SELECT 语句中,我想创建一个如下所示的结果集:

Group           Codes
--------------------------
ECMR            BE,BF,I,LD
CDMR            BG,BA,IS,LS

结果集中的每条记录都包含一列 <Car><Group>group</Group></Car>和另一列用于连接每个 <Insurances><Optional><Code>code</Code></Optional></Insurances> .

这可能吗?

最佳答案

select T.N.value('(Car/Group/text())[1]', 'varchar(10)') as [Group],
       (
         select ','+T2.N.value('(./text())[1]', 'varchar(10)')
         from T.N.nodes('Insurances/Optional/Code') as T2(N)
         for xml path(''),  type
       ).value('substring(./text()[1], 2)', 'varchar(100)') as Codes
from @XML.nodes('/Response/Offers') as T(N)

关于xml - T-SQL 和 XML - 将父元素和多个子元素连接到结果集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13390058/

相关文章:

sql - T-SQL 中的 DateTimeOffset.Now

sql - 使用 OPENQUERY 执行存储过程

java - 将日期时间解析为 JAVA 日期

sql - 使用 SQL Server 代理作业发送 HTTP 请求

ruby 中的xml差异?

html - 使用经典 ASP 将 HTML 保存为 XML

sql - 如何在 Where 子句中使用 NOT?

sql - 将 linq with All 转换为 SQL

java - JENA - 从 RDF 中获取值(value)

xml - 使用 VB.NET 遍历 XML 文件