聚合函数 - 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 中的命名空间关键字定义命名空间前缀。 该前缀随后将用于 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     

另请参阅

针对 xml 数据类型的 XQuery 函数