使用'For XML Path'构建查询

时间:2012-11-22 06:55:59

标签: sql sql-server

我有一个包含以下数据的表:

柱: 等级,类别,财产,价值

数据:

0,衣服,鞋子,耐克

0,衣服,鞋子2,阿迪达斯

0,衣服,鞋子3,FILA

0,衣服,帽子,汤姆

1,运动衫,Dash1,红色

1,运动衫,Dash2,蓝色

我想生成一个包含每个级别数据的xml(迭代级别)。 这就是我所期待的:

<Root>
 <Level>
   <Clothes>
      <Shoe1>Nike</Shoe1>    
      <Shoe2>Adidas</Shoe2>
      <Shoe3>FILA</Shoe3>
   </Clothes>
   <Clothes>
      <Hat>Tom</Hat>
   </Clothes>
 </Level>
 <Level>
     <Sweatshirt>
         <Dash1>Red</Dash1>             
         <Dash2>Blue</Dash2>
     </Sweatshirt>
 </Level>
</Root>

2 个答案:

答案 0 :(得分:0)

尝试使用dbms_xmlgen

select dbms_xmlgen.getxml('your query') from dual;

您可以使用游标迭代每个项目

答案 1 :(得分:0)

你可以尝试做这样的事情

select
    cast(
        '<' + T.Class + '>' +
        cast(
            (
                select
                    cast('<' + TT.Property + '>' + TT.Value + '</' + TT.Property + '>' as xml)
                from #MyTable as TT
                where TT.Level = T.Level and TT.Class = T.Class
                for xml path('')
            )
         as nvarchar(max)) +
         '</' + T.Class + '>'
     as xml) as [Level]
from (select distinct TT.Level, TT.Class from #MyTable as TT) as T
for xml path(''), root('Root'), type

<强> sql fiddle demo

不是我真的喜欢这种解决方案。您也可以尝试动态SQL