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