开发者社区> 问答> 正文

SQL Server中的FOR XML:基于列的公共值的元素

我正在使用FOR XML从SQL查询创建XML文件。我想基于某个特定列(在这种情况下为“位置”)的通用值创建元素:

location    team    score
Adelong     SFP     104
Adelong     LIB     189
Adelong     CDP     9
Hurstville  SFP     14
Hurstville  LIB     64
Hurstville  CDP     13

我可以像这样轻松地将他逐行转换为XML:

SELECT(SELECT location, team, score FROM MyTable FOR XML PATH('node'), TYPE ) FOR XML PATH(''), ROOT('root')

产生看起来像这样的XML:

<node>
    <location>Adelong</location>
    <team>SFP</team>
    <score>104</score>
  </node>
  <node>
    <location>Adelong</location>
    <team>LIB</team>
    <score>189</score>
  </node>
  <node>
    <location>Adelong</location>
    <team>CDP</team>
    <score>9</score>
  </node>
但是我真正想要的是:

<location name="Adelong">
    <node>
        <team>SFP</team>
        <score>104</score>
    </node>
    <node>
        <team>LIB</team>
        <score>189</score>
    </node>
    <node>
        <team>CDP</team>
        <score>9</score>
    </node>
</location>

展开
收起
祖安文状元 2020-01-05 14:30:20 402 0
1 条回答
写回答
取消 提交回答
  • 您可以使用临时派生表来获取不同的位置,从中选择位置,并在相关子查询中获取团队和得分。

    SELECT t1.location [@name],
           (SELECT t2.team,
                   t2.score
                   FROM mytable t2
                   WHERE t2.location = t1.location
                   FOR XML PATH('node'),
                           TYPE)
           FROM (SELECT DISTINCT
                        t1.location
                        FROM mytable t1) t1
           FOR XML PATH('location');
    
    2020-01-05 14:30:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载