聚合函数 - count
适用于:SQL Server
返回 $arg指定的序列中包含的项数。
语法
fn:count($arg as item()*) as xs:integer
参数
$arg
要计数的项。
备注
如果 $arg 为空序列,则返回 0。
示例
本主题针对存储在 AdventureWorks 数据库中各种 xml 类型列中的 XML 实例提供 XQuery 示例。
A. 使用 count() XQuery 函数计算产品型号生产中的生产车间数。
以下查询将计算产品型号 (ProductModelID=7) 生产过程中的生产车间数。
SELECT Production.ProductModel.ProductModelID,
Production.ProductModel.Name,
Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<NoOfWorkStations>
{ count(/AWMI:root/AWMI:Location) }
</NoOfWorkStations>
') as WorkCtrCount
FROM Production.ProductModel
WHERE Production.ProductModel.ProductModelID=7
请注意上述查询的以下方面:
XQuery Prolog 中的 namespace 关键字定义命名空间前缀。 该前缀随后将用于 XQuery 主体。
查询构造包含 元素的 <
NoOfWorkStations
> XML。XQuery 正文中的 count () 函数对元素数 <
Location
> 进行计数。
结果如下:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------------------------
7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>
您还可以构造包含产品型号 ID 和名称的 XML,如以下查询所示:
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<NoOfWorkStations
ProductModelID= "{ sql:column("Production.ProductModel.ProductModelID") }"
ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
{ count(/AWMI:root/AWMI:Location) }
</NoOfWorkStations>
') as WorkCtrCount
FROM Production.ProductModel
WHERE Production.ProductModel.ProductModelID= 7
结果如下:
<NoOfWorkStations ProductModelID="7"
ProductModelName="HL Touring Frame">6</NoOfWorkStations>
可以将这些值作为非 xml 类型(而不是 xml 类型)返回,如以下查询所示。 查询使用 value () 方法 (xml 数据类型) 来检索工作中心位置计数。
SELECT ProductModelID,
Name,
Instructions.value('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
count(/AWMI:root/AWMI:Location)', 'int' ) as WorkCtrCount
FROM Production.ProductModel
WHERE ProductModelID=7
结果如下:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------
7 HL Touring Frame 6