Aggregerade funktioner – antal

Gäller för:SQL Server

Returnerar antalet objekt som ingår i sekvensen som anges av $arg.

Syntax

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

Arguments

$arg
Föremål att räkna.

Remarks

Returnerar 0 om $arg är en tom sekvens.

Examples

Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika XML- typkolumner i AdventureWorks-databasen.

A. Med hjälp av count() XQuery-funktionen för att räkna antalet arbetsplatsplatser i tillverkningen av en produktmodell

Följande fråga räknar antalet arbetsplatsplatser i tillverkningsprocessen för en produktmodell (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  

Observera följande från föregående fråga:

  • Namnrymdsnyckelordet i XQuery Prolog definierar ett namnrymdsprefix. Prefixet används sedan i XQuery-kroppen.

  • Frågan konstruerar XML som inkluderar elementet <NoOfWorkStations> .

  • Count()-funktionen i XQuery-kroppen räknar antalet <Location> element.

Det här är resultatet:

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

Du kan också konstruera XML:en för att inkludera produktmodellens ID och namn, som visas i följande fråga:

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  

Det här är resultatet:

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

Istället för XML kan du returnera dessa värden som icke-xml-typ, som visas i följande fråga. Frågan använder value()-metoden (xml-datatyp) för att hämta antalet arbetsplatsplatser.

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  

Det här är resultatet:

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