2012-11-22 52 views
-1

我有一个包含下列数据的表:栋查询与 '对于XML路径'

列: 程度,等级,属性,价值

数据:

0,服装,Shoe1耐克

0,服装,Shoe2,阿迪达斯

0,服装,Shoe3,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> 
+0

?是SQL Server,MySQL还是什么? –

+0

我正在使用SQL Server – ohadinho

+0

那么你仍然需要一些解决这个或这个问题应该关闭? –

回答

0

尝试使用DBMS_XMLGEN

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

你可以使用鼠标,通过每个项目迭代

+0

我写了: SELECT @DataOut = Convert(varchar(max),(SELECT [Value] AS Property FROM MyTable WHERE [Level] = 1 FOR XML path('Level'))) 我的问题是如何重复级别以及如何将元素写为属性值,而不是像“”“” – ohadinho

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

这不是我真的很喜欢这种类型的解决方案。您还可以尝试使用哪种RDBMS的动态SQL

+0

我收到错误消息:'消息9438,级别16,状态1,行1 XML解析:行1,字符11,text/xmldecl不是在输入' – ohadinho

+0

开始时你使用的是哪个版本的SQL Server? –

+0

SQL Server 2008 R2 – ohadinho