【问题标题】:Convert common sql column value to xml node将常用 sql 列值转换为 xml 节点
【发布时间】:2014-11-21 20:11:37
【问题描述】:

假设我有一个这样的数据集:

|Group|Value|
|-----|-----|
|  A  | 123 |
|-----|-----|
|  A  | 234 |
|-----|-----|
|  B  | 123 |
|-----|-----|

并希望像这样将其转换为 XML:

<Groups>
    <Group Name="A">
         <Values>
              <Value>123</Value>
              <Value>234</Value>   
         </Values> 
    </Group>  
    <Group Name="B">
         <Values>
              <Value>123</Value>
         </Values> 
    </Group>    
</Groups>

我尝试过使用类似的东西:

   SELECT  
         [Group] AS "@Name"
        ,[Value] AS "Group/Values/Value"
    FROM [Tablename]
    FOR XML PATH('Group'), ROOT('Groups')

但我得到的是:

<Groups>
    <Group Name="A">
         <Values>
              <Value>123</Value> 
         </Values> 
    </Group>  
    <Group Name="A">
         <Values>
              <Value>234</Value>   
         </Values> 
    </Group>  
    <Group Name="B">
         <Values>
              <Value>123</Value>
         </Values> 
    </Group>    
</Groups>

如何根据第一列的数据组合这些节点?

【问题讨论】:

  • 你需要按组名分组
  • 添加 GROUP BY [Group], [Value] 没有做任何事情。

标签: sql xml sql-server-2012


【解决方案1】:

测试数据

DECLARE @TABLE TABLE([Group] VARCHAR(10), Value INT)
INSERT INTO @TABLE VALUES 
('A',123),
('A',234),
('B',123)

查询

SELECT   t.[Group] AS [@Name]

      ,(SELECT [Value] AS [Value]
        FROM @TABLE
        WHERE [Group] = t.[Group]
        FOR XML PATH(''), ROOT('Values') ,TYPE)
FROM @TABLE t
GROUP BY t.[Group]
FOR XML PATH('Group'), ROOT('Groups')

结果

<Groups>
  <Group Name="A">
        <Values>
              <Value>123</Value>
              <Value>234</Value>
        </Values>
  </Group>
  <Group Name="B">
        <Values>
             <Value>123</Value>
        </Values>
  </Group>
</Groups>

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    相关资源
    最近更新 更多