Funções de Agregação – count

Aplica-se a:SQL Server

Retorna o número de itens contidos na sequência especificada por $arg.

Sintaxe

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

Argumentos

$arg
Itens a serem contados.

Comentários

Retornará 0 se $arg for uma sequência vazia.

Exemplos

Este tópico fornece exemplos XQuery em instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.

a. Usando a função count() XQuery para contar o número de locais de centro de trabalho na fabricação de um modelo de produto

A consulta a seguir conta o número de locais de centro de trabalho no processo de fabricação de um modelo de produto (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 o seguinte na consulta anterior:

  • A palavra-chave namespace no XQuery Prolog define um prefixo de namespace. O prefixo é então usado no corpo do XQuery.

  • A consulta constrói XML que inclui o <NoOfWorkStations> elemento .

  • A função count() no corpo XQuery conta o número de <Location> elementos.

Este é o resultado:

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

Você também pode construir o XML para incluir o nome e a ID do modelo do produto, como mostrado na seguinte consulta:

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  

Este é o resultado:

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

Em vez de XML, você pode retornar esses valores como tipo não xml, como mostrado na consulta a seguir. A consulta usa o método value() (tipo de dados xml) para recuperar a contagem de locais da central de trabalho.

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  

Este é o resultado:

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

Consulte Também

Funções XQuery em tipos de dados xml