【问题标题】:Group element by another element?按另一个元素分组元素?
【发布时间】:2023-04-01 00:05:01
【问题描述】:

下面的SQL

with t(a, b) as (select 1, 2 union all select 1, 3)
select  t.a as 'X/A/@Id',
        t.b as 'X/A/b'
from    t
for xml path(''), root('ROOT')

返回

<ROOT>
  <X>
    <A Id="1">
      <b>2</b>
    </A>
  </X>
  <X>
    <A Id="1">
      <b>3</b>
    </A>
  </X>
</ROOT>

由于Id(a) 相同,因此是否可以将两个&lt;b&gt; 分组为&lt;a&gt;? (如果可能的话,这是一种不使用子查询的方法吗?)预期,

<ROOT>
  <X>
    <A Id="1">
      <b>2</b>
      <b>3</b>
    </A>
  </X>
</ROOT>

【问题讨论】:

    标签: xml sql-server-2008 sql-server-2005


    【解决方案1】:

    您需要在外部查询中选择第一列,在内部查询中选择第二列,然后选择GROUP BY第一列。

    ;with t(a, b) as 
    (
        select 1, 2 
        union all 
        select 1, 3
    )
    select t1.a as 'X/A/@Id',
    (
        SELECT T.B FROM T 
        WHERE T.a=t1.a
        FOR XML PATH(''), type
    )as 'X/A'
    from    t t1
    group by t1.a
    for xml path(''), root('ROOT')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2012-09-27
      • 1970-01-01
      • 2021-03-20
      • 2020-04-05
      相关资源
      最近更新 更多