从 XML 中提取多个值并在一行中返回
Posted
技术标签:
【中文标题】从 XML 中提取多个值并在一行中返回【英文标题】:Pull multiple values from XML and return in one row 【发布时间】:2021-02-05 17:34:31 【问题描述】:在 SQL Server 上,我在记录中有一个 XML 字段,它包含多个相似类型的节点,但 ID 不同。 我想从该 XML 中提取一些 ID 并返回一行。
这是一个简单的 XML 示例:
...
<Items>
<Item>
<ItemID>1</ItemID>
<ItemValue>A</ItemValue>
</Item>
<Item>
<ItemID>2</ItemID>
<ItemValue>B</ItemValue>
</Item>
</Items>
我想在一行上输出我正在搜索的特定项目的值。
类似
select XML_Values
from the_table
where conditions_met = true
我使用了交叉应用,可以只返回所需值的节点,但输出都在单独的行上。 理想情况下,Id 喜欢的输出类似于以下内容:
| Id=1 | Id=2 | (Column headers)
| A | B |
如果有任何帮助,我将不胜感激。
【问题讨论】:
不清楚你需要什么。请编辑您的帖子并阐明您的所需输出。 【参考方案1】:请尝试以下解决方案。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, xmldata XML);
INSERT INTO @tbl (xmldata) VALUES
(N'<Items>
<Item>
<ItemID>1</ItemID>
<ItemValue>A</ItemValue>
</Item>
<Item>
<ItemID>2</ItemID>
<ItemValue>B</ItemValue>
</Item>
</Items>');
-- DDL and sample data population, end
SELECT ID
, c.value('(Item[1]/ItemValue/text())[1]','VARCHAR(30)') AS Item1
, c.value('(Item[2]/ItemValue/text())[1]','VARCHAR(30)') AS Item2
FROM @tbl
CROSS APPLY xmldata.nodes('/Items') AS t(c);
输出
+----+-------+-------+
| ID | Item1 | Item2 |
+----+-------+-------+
| 1 | A | B |
+----+-------+-------+
【讨论】:
以上是关于从 XML 中提取多个值并在一行中返回的主要内容,如果未能解决你的问题,请参考以下文章
如何从整数中删除最小值并在不使用字符串的情况下返回其余数字[关闭]