Aggregatfunktionen – count
Gilt für:SQL Server
Gibt die Anzahl der Elemente zurück, die in der von $arg angegebenen Sequenz enthalten sind.
Syntax
fn:count($arg as item()*) as xs:integer
Argumente
$arg
Zu zählende Elemente.
Bemerkungen
Gibt 0 zurück, wenn $arg eine leere Sequenz ist.
Beispiele
Dieses Thema enthält XQuery-Beispiele für XML-Instanzen, die in verschiedenen Xml-Typspalten in der AdventureWorks-Datenbank gespeichert sind.
A. Verwenden der count()-Funktion von XQuery zum Zählen der Arbeitsplatzstandorte im Fertigungsprozess eines Produktmodells
Die folgende Abfrage zählt die Anzahl der Arbeitsplatzstandorte im Fertigungsprozess eines Produktmodells (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
Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:
Das namespace-Schlüsselwort in XQuery Prolog definiert ein Namespacepräfix. Dieses Präfix wird anschließend im Hauptteil der XQuery verwendet.
Die Abfrage erstellt XML, das das <
NoOfWorkStations
> -Element enthält.Die count() -Funktion im XQuery-Text zählt die Anzahl der <
Location
> Elemente.
Dies ist das Ergebnis:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------------------------
7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>
Sie können den XML-Code auch so konstruieren, dass er die ID und den Namen des Produktmodells enthält, wie in der folgenden Abfrage gezeigt:
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
Dies ist das Ergebnis:
<NoOfWorkStations ProductModelID="7"
ProductModelName="HL Touring Frame">6</NoOfWorkStations>
Anstelle von XML können Sie die Werte auch so zurückgeben, dass sie nicht vom Typ XML sind, wie in der folgenden Abfrage gezeigt. Die Abfrage verwendet die value()-Methode (xml-Datentyp), um die Anzahl der Arbeitscenterstandorte abzurufen.
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
Dies ist das Ergebnis:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------
7 HL Touring Frame 6