Sql 将分组按字段转换为子元素的XML查询

Sql 将分组按字段转换为子元素的XML查询,sql,sql-server,xml,Sql,Sql Server,Xml,我希望以下查询以父子格式返回字段。这可能吗 这是问题 SELECT Field1, Field2, Field3 FROM ATable GROUP BY Field1, Field2, Field3 ORDER BY Field1, Field2, Field3 FOR xml auto 下面是我想要返回的内容(不必像这样,我只需要层次结构)。我似乎无法显示其余的xml,

我希望以下查询以父子格式返回字段。这可能吗

这是问题

SELECT   Field1,
         Field2,
         Field3
FROM     ATable
GROUP BY Field1,
         Field2,
         Field3
ORDER BY Field1,
         Field2,
         Field3 
FOR xml auto
下面是我想要返回的内容(不必像这样,我只需要层次结构)。我似乎无法显示其余的xml,但这就是其中的大部分

<Field1 Value='1'>
<Field2 Value='1'>
    <Field3 Value='2'>
</Field2>
<Field2 Value='2'/>
<Field2 Value='3'/>
<Field1/>
<Field1 Value='2'>
<Field2 Value='1'>
    <Field3 Value='2'>
</Field2>
<Field2 Value='2'/>
<Field2 Value='3'/>
<Field1/>   

您可以使用
type
选项嵌套XML查询。下面是一个例子:

declare @t table (Field1 int, Field2 int, Field3 int)

insert @t values (1,1,2), (1,2,null), (1, 3, null), 
                 (2,1,2), (2,2,null), (2,3,null)

select  Field1 as 'Field1/@Value'
,       (
        select  Field2 as 'Field2/@Value'
        ,       (
                select  Field3 as 'Field3/@Value'
                from    @t t3
                where   t3.Field1 = t2.Field1
                        and t3.Field2 = t2.Field2
                        and Field3 is not null
                for     xml path(''), type
                ) as 'Field2'
        from    @t t2
        where   t2.Field1 = t1.Field1
                and Field2 is not null
        for     xml path(''), type
        ) as 'Field1'
from    @t t1
group by   
        Field1
for     xml path(''), type
-->



<>这确实会变得很复杂,所以不是用SQL生成XML,而是考虑一种客户端语言,比如C或VB.NET。< /p>@ Ty-Myes,如何使它正确显示?您使用文本区域顶部的“代码示例”按钮。这是两条线上的101010。引号符号位于该符号旁边,它确实阻止引号。尽管您仍然需要在代码中使用换行符和空格来格式化它,否则每一行都从相同的位置开始。在你的答案下面,它预览了你正在纠正的地方,这样你就可以一边纠正了。@Kyra-ty,谢谢你的反馈。我一直在使用101010按钮并粘贴到“此处的位置代码”部分。但有时我似乎会被它搞砸。谁知道。。谢谢我发现输入代码、突出显示然后按下按钮更容易。你不必一直粘贴它。键入时更容易混淆,但通过预览,您可以修复任何问题。np:)非常有效!是的,我可以在c#中解析所有内容并构建层次结构(用于在树中显示)。这是我一直做的事。我想尝试一下,这样我就可以避免再次编写相同的ole转换记录到树函数。太棒了!这正是我想要的。
<Field1 Value="1">
  <Field2 Value="1">
    <Field3 Value="2" />
  </Field2>
  <Field2 Value="2" />
  <Field2 Value="3" />
</Field1>
<Field1 Value="2">
  <Field2 Value="1">
    <Field3 Value="2" />
  </Field2>
  <Field2 Value="2" />
  <Field2 Value="3" />
</Field1>