Funzioni di aggregazione - count
Si applica a: SQL Server
Restituisce il numero di elementi contenuti nella sequenza specificata da $arg.
Sintassi
fn:count($arg as item()*) as xs:integer
Argomenti
$arg
Elementi da contare.
Osservazioni:
Restituisce 0 se $arg è una sequenza vuota.
Esempi
In questo argomento vengono forniti esempi di XQuery su istanze XML archiviate in varie colonne di tipo xml nel database AdventureWorks.
R. Utilizzo della funzione XQuery count() per il conteggio del numero di centri di lavorazione nella produzione di un modello di prodotto
La query seguente conta il numero di centri di lavorazione nel processo di produzione di un modello di prodotto (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
Dalla query precedente si noti quanto segue:
La parola chiave namespace in XQuery Prolog definisce un prefisso dello spazio dei nomi. Il prefisso viene quindi utilizzato nel corpo della query XQuery.
La query costruisce xml che include l'elemento <
NoOfWorkStations
> .La funzione count() nel corpo di XQuery conta il numero di <
Location
> elementi.
Risultato:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------------------------
7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>
È inoltre possibile costruire il codice XML in modo che includa ID e nome del modello di prodotto, come illustrato nella query seguente:
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
Risultato:
<NoOfWorkStations ProductModelID="7"
ProductModelName="HL Touring Frame">6</NoOfWorkStations>
È possibile ottenere la restituzione dei valori in un tipo non xml, come illustrato nella query seguente. La query usa il metodo value() (tipo di dati xml) per recuperare il numero di posizioni del centro di lavoro.
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
Risultato:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------
7 HL Touring Frame 6