我有一张桌子
Key code
1 100
1 200
1 300
1 400
2 100
2 200
2 300
我在一行中使用键和其他行XML_data
查找我的结果Key XML_Data(XML column)
1 <sub><key>1...
2 <sub><key>2...
XML_Data示例:
<sub>
<key> 1 </Key>
<list>
<code> 100 </code>
<code> 200 </code>
<code> 300 </code>
<code> 400 </code>
</list>
</sub>
由于
答案 0 :(得分:1)
我认为这SQL Server: Two-level GROUP BY with XML output更接近。
在此发表,因为我没有评论的声誉。
答案 1 :(得分:0)
您没有详细说明XML的位置等等,但一般情况下,查询后应该对您的情况有所帮助。
INSERT INTO dbo.YourTable
(key, xml_data)
VALUES
(KEY, CONVERT(XML, N'YOUR_XML', 2));
通过将XML声明为变量,从XML中提取KEY,再到第二列,根据整个变量添加XML,您可以更进一步。
DECLARE @input XML = '<sub>
<key> 1 </key>
<list>
<code> 100 </code>
<code> 200 </code>
<code> 300 </code>
<code> 400 </code>
</list>
</sub>'
INSERT INTO dbo.YourTable(key, xml_data)
SELECT
key = COALESCE(XCol.value('key[1]', 'int'),0),
xml_data = CONVERT(XML, N''''+@input+'''', 2)
FROM @input.nodes('/sub') AS XTbl(XCol)
@ATC ,感谢您的评论。如果确实需要的是将表格转换为XML格式,请尝试以下 - FOR XML PATH 是您正在寻找的
SELECT
key,
code as "list/code"
FROM dbo.YourTable
FOR XML PATH('sub')
不幸的是,我现在无法测试它。 在这里,您可以看到类似的问题:How to convert records in a table to xml format using T-SQL?
答案 2 :(得分:0)
你的问题非常模糊,但我神奇的水晶球告诉我,你正在寻找这个:
DECLARE @tbl TABLE([Key] INT, code INT);
INSERT INTO @tbl VALUES
(1,100)
,(1,200)
,(1,300)
,(1,400)
,(2,100)
,(2,200)
,(2,300);
- 查询将首先找到不同的密钥列表,然后使用嵌套的FOR XML
- 选择将数据收集到所需的结构中:
WITH DistinctKeys AS
(SELECT [Key] FROM @tbl GROUP BY [Key])
SELECT dk.[Key]
,(
SELECT dk.[Key]
,(
SELECT t.code
FROM @tbl AS t
WHERE t.[Key]=dk.[Key]
FOR XML PATH(''),ROOT('list'),TYPE
)
FOR XML PATH('sub'),TYPE
) AS XML_Data
FROm DistinctKeys AS dk
结果
Key XML_Data
1 <sub><Key>1</Key><list><code>100</code><code>200</code><code>300</code><code>400</code></list></sub>
2 <sub><Key>2</Key><list><code>100</code><code>200</code><code>300</code></list></sub>