c# - XPATH 查询以从存储在 SQL Server 数据库列中的 XML 中获取数据

标签 c# sql-server xml tsql xpath

我将 XML 数据存储在 SQL Server 数据库中的一列中。

<data>
    <row>
<element name="product">Piston</element>
<element name="number">1.2</element>
    </row>
<row>
<element name="product">Piston Ring</element>
<element name="number">2</element>
    </row>
<row>
<element name="product">Piston</element>
<element name="number">1.5</element>
    </row>
</data>

有没有一种方法可以获得以下格式的结果?

------------------------------
Product    | Count
------------------------------
Piston     |   2
Piston Ring|   1
------------------------------

我尝试使用 Xpath 进行计数,但不确定是否可以按产品分组然后进行计数。

我正在寻找类似(在 SQL 查询中)的东西

SELECT Product, Count(Product) FROM ABC
GROUP BY Product

最佳答案

您不能在 GROUP BY 中直接使用 XML 方法,所以我会使用 CTE。首先,您从 XML 中获取表格数据,然后您可以使用 GROUP BY 执行“正常”COUNT:

DECLARE @xml XML=
'<data>
  <row>
    <element name="product">Piston</element>
    <element name="number">1.2</element>
  </row>
  <row>
    <element name="product">Piston Ring</element>
    <element name="number">2</element>
  </row>
  <row>
    <element name="product">Piston</element>
    <element name="number">1.5</element>
  </row>
</data>';

;WITH MyRows AS
(
    SELECT OneRow.value('(element[@name="product"])[1]','varchar(max)') AS Product
    FROM @xml.nodes('/data/row') AS A(OneRow)
)
SELECT Product,COUNT(Product) AS [Count]
FROM MyRows
GROUP BY Product

关于c# - XPATH 查询以从存储在 SQL Server 数据库列中的 XML 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35645684/

相关文章:

c# - 为什么 C# 不像 C++/CLI 那样直接修改托管堆中的字段?

c# - 使用 DotNetZip 和 MemoryStream 时,解压缩数据被填充为 '\0'

sql - 如何避免因 1 NULL 而导致整个 INSERT 批处理失败

java - org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 与 javax.xml.parsers.DocumentBuilderFactory 不兼容

java - 在 xml 文件中为一个用户授予 spring security 访问权限

C# 模板和特殊构造函数

c# - 对 MailChimp API v3 的发布请求总是返回未授权

sql-server - 从 Azure Databricks 连接到 SQL Server

从字符串进行 SQL 查询

xml - 如何以编程方式通过 XML::Twig 添加实体声明?