sql 导出为 xml 相同的值

sql export to xml same values as one

我有一个名为 "Location" 的 table,如下所示:

society  site  floor  room
---------------------------
 Apple  London first  office
 Apple  London first  Meeting
 Apple  London first  Conference
 Apple  London second  IT
 Apple  London second  HR
 Apple  Rome   second  CCM
 Apple  Rome   second  BM

我不会将 table 导出为 xml 格式:

<LocationData>
       <Society name ="Apple">
             <site name ="London">
                 <floor name ="first">
                     <room>office</room>
                     <room>Meeting</room>
                     <room>Conference</room>
                 </floor>
                 <floor name ="second">
                     <room>IT</room>
                     <room>HR</room>
                 </floor>
             </site>
             <site name ="Rome">
                 <floor name ="second">
                     <room>CCM</room>
                     <room>BM</room>
                 </floor>
              </site>
        </society>
</LocationData>

我正在使用 sql 2008。你能帮帮我吗?谢谢问候。

运行 这在您的 sql 服务器中

SELECT * 来自位置 对于 XML 自动

这样试试(我又加了一个社团来展示1:n结构的各个层次:

DECLARE @mockup TABLE(society VARCHAR(100),[site] VARCHAR(100),[floor] VARCHAR(100),room VARCHAR(100));
INSERT INTO @mockup VALUES
 ('Apple','London','first','office')
,('Apple','London','first ','Meeting')
,('Apple','London','first','Conference')
,('Apple','London','second','IT')
,('Apple','London','second','HR')
,('Apple','Rome','second','CCM')
,('Apple','Rome','second','BMD')
,('Orange','Vienna','first','Test');

SELECT m1.society AS [@name]
      ,(
        SELECT m2.[site] AS [@name]
              ,(
                SELECT m3.[floor] AS [@name]
                      ,(
                        SELECT m4.room
                        FROM @mockup AS m4
                        WHERE m4.society=m1.society AND m4.[site]=m2.[site] AND m4.[floor]=m3.[floor] 
                        GROUP BY m4.room
                        FOR XML PATH(''),TYPE
                       )
                FROM @mockup AS m3
                WHERE m3.society=m1.society AND m3.[site]=m2.[site] 
                GROUP BY m3.[floor]
                FOR XML PATH('floor'),TYPE
               )
        FROM @mockup AS m2
        WHERE m2.society=m1.society
        GROUP BY m2.[site]
        FOR XML PATH('site'),TYPE
       )
FROM @mockup AS m1
GROUP BY m1.society
FOR XML PATH('Society'),ROOT('LocationData');

结果

<LocationData>
  <Society name="Apple">
    <site name="London">
      <floor name="first">
        <room>Conference</room>
        <room>Meeting</room>
        <room>office</room>
      </floor>
      <floor name="second">
        <room>HR</room>
        <room>IT</room>
      </floor>
    </site>
    <site name="Rome">
      <floor name="second">
        <room>BMD</room>
        <room>CCM</room>
      </floor>
    </site>
  </Society>
  <Society name="Orange">
    <site name="Vienna">
      <floor name="first">
        <room>Test</room>
      </floor>
    </site>
  </Society>
</LocationData>