假设我有一个这样的数据集:
|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>
如何根据第一列中的数据组合这些节点?
答案 0 :(得分:2)
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>