sql导出为与xml相同的值

sql导出为与xml相同的值,sql,sql-server,xml,export,Sql,Sql Server,Xml,Export,我有一个名为“Location”的表,如下所示: 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

我有一个名为“Location”的表,如下所示:

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
我不想以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>

办公室
会合
会议
信息技术
人力资源
CCM
BM

我正在使用SQL2008。你能帮帮我吗?谢谢您的问候。

在sql server中运行此操作

从位置选择* 对于XML AUTO

可以这样尝试(我又添加了一个society,以显示所有级别的
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>

会议
会合
办公室
人力资源
信息技术
骨密度
CCM
试验

你应该试着自己写。这不是免费的代码编写网站。嗨,谢谢你的重播。我已经试过了,但是我得到了一份不同的报告。等等……有可能像我描述的那样写报告吗?嗨,我会避免使用
自动
模式…(至少如果你知道如何使用
路径
模式获得相同的结果).你依靠引擎的聪明来分析你的数据并找到最好的表示。这可能有效,也可能无效。。。