Funciones de agregado: count

Se aplica a:SQL Server

Devuelve el número de elementos contenidos en la secuencia especificada por $arg.

Sintaxis

  
fn:count($arg as item()*) as xs:integer  

Argumentos

$arg
Elementos que se deben contar.

Comentarios

Devuelve 0 si $arg es una secuencia vacía.

Ejemplos

En este tema se proporcionan ejemplos de XQuery en instancias XML almacenadas en varias columnas de tipo xml de la base de datos AdventureWorks.

A. Utilizar la función count() de XQuery para contar el número de centros de trabajo en la fabricación de un modelo de producto

La consulta siguiente cuenta el número de centros de trabajo que participan en el proceso de fabricación de un modelo de producto (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  

Observe lo siguiente en la consulta anterior:

  • La palabra clave de espacio de nombres de XQuery Prolog define un prefijo de espacio de nombres. A continuación, el prefijo se usa en el cuerpo de XQuery.

  • La consulta construye XML que incluye el <NoOfWorkStations> elemento .

  • La función count() del cuerpo de XQuery cuenta el número de <Location> elementos.

El resultado es el siguiente:

ProductModelID   Name                 WorkCtrCount       
-------------- ---------------------------------------------------  
7             HL Touring Frame  <NoOfWorkStations>6</NoOfWorkStations>     

También puede construir la instancia XML de modo que incluya el identificador y el nombre del modelo de producto, tal y como se muestra en la consulta siguiente:

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  

El resultado es el siguiente:

<NoOfWorkStations ProductModelID="7"   
                  ProductModelName="HL Touring Frame">6</NoOfWorkStations>  

En lugar de la instancia XML, puede devolver estos valores con un tipo distinto de xml, tal y como se muestra en la consulta siguiente. La consulta usa el método value() (tipo de datos xml) para recuperar el recuento de ubicaciones del centro de trabajo.

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  

El resultado es el siguiente:

ProductModelID    Name            WorkCtrCount  
-------------- ---------------------------------  
7              HL Touring Frame        6     

Consulte también

Funciones de XQuery con el tipo de datos xml