将SQL查询结果转换为XML

时间:2019-11-29 10:01:09

标签: sql sql-server

输入数据

id  year    Name    provid  prov
1   1995    MAC 1995-11_CL236   reg 236
1   1995    MAC 1995-11_CL230   reg 230 (1)
1   1995    MAC 1995-11_CL229J  reg 229J
1   1995    MAC 1995-11_CL260   reg 260

我的查询如下

select  
    id, year, Name, prov, provid 
from 
    Table 
for xml path ('entry'), root('legref'), elements

上面的查询为每一行生成不同的条目。但是我需要按ID年份,名称分组,并提供具有不同省份和省份的单项。

<legref>
  <entry>
    <id>1</id>
    <year>1995</year>
    <Name>MAC</Name>
    <prov>reg 229J</prov>
    <provid>NSW_REG_1995-11_CL229J</provid>
  </entry>
  <entry>
    <id>1</id>
    <year>1995</year>
    <Name>MAC</Name>
    <prov>reg 230 (1)</prov>
    <provid>NSW_REG_1995-11_CL230</provid>
  </entry>
  <entry>
    <id>1</id>
    <year>1995</year>
    <Name>MAC</Name>
    <prov>reg 236</prov>
    <provid>NSW_REG_1995-11_CL236</provid>
  </entry>
  <entry>
    <id>1</id>
    <year>1995</year>
    <Name>MAC</Name>
    <prov>reg 260</prov>
    <provid>NSW_REG_1995-11_CL260</provid>
  </entry>
</legref>

输出数据:

如何将SQL查询结果转换为XML?

预期结果集:

<legref>
     <entry>
            <id>1<id>
            <year>1995</year>
            <Name>MAC</Name>
            <prov provID="1995-11_CL230">reg 230 (1)</prov>
            <prov provID="1995-11_CL236">reg 236</prov>
            <prov provID="1995-11_CL260">reg 260</prov>
            <prov provID="1995-11_CL229J">reg 229J</prov>
        </entry>
</legref>

2 个答案:

答案 0 :(得分:1)

尝试一下

FIDDLE DEMO

SELECT ID, Year, Name, 
       (
            SELECT ProvID AS 'Prov/@ProvID',Prov
            FROM tbl t
            WHERE ID = t.ID AND Name = t.Name
            FOR XML PATH(''),TYPE
        )
FROM tbl 
GROUP BY ID, Year, Name
FOR XML PATH ('Entry'),ROOT('legref')

输出

<legref>
  <Entry>
    <ID>1</ID>
    <Year>1995</Year>
    <Name>MAC</Name>
    <Prov ProvID="1995-11_CL236">Reg 236</Prov>
    <Prov ProvID="1995-11_CL230">Reg 230</Prov>
    <Prov ProvID="1995-11_CL229J">Reg 229J</Prov>
    <Prov ProvID="1995-11_CL260">Reg 260</Prov>
  </Entry>
</legref>

答案 1 :(得分:0)

请尝试以下查询,

SELECT id
    ,year
    ,Name
    ,prov
    ,provid
FROM TABLE
FOR XML RAW ,ELEMENTS

对于相同类型的结果,我已经在不同的表中尝试过。 请检查快照: enter image description here enter image description here