count 関数 (XQuery)
$arg で指定したシーケンスに含まれるアイテムの数を返します。
構文
fn:count($arg as item()*) as xs:integer
引数
- $arg
カウントするアイテム。
解説
$arg が空シーケンスの場合、0 を返します。
例
このトピックでは、AdventureWorks データベースのさまざまな xml 型列に格納される XML インスタンスに対する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks データベースの xml データ型表現」を参照してください。
A. count() XQuery 関数を使用して、ある製品モデルを製造するワーク センターの場所の数をカウントする
次のクエリでは、ある製品モデル (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
上のクエリに関して、次の点に注意してください。
- XQuery プロローグの namespace キーワードで名前空間プレフィックスを定義します。このプレフィックスは XQuery の本文で使用されます。
- <
NoOfWorkStations
> 要素を含んだ XML が構成されます。 - XQuery 本文の count() 関数で <
Location
> 要素の数をカウントします。
結果を次に示します。
ProductModelID Name WorkCtrCount
-------------- ---------------------------------------------------
7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>
次のクエリで示すように、製品モデルの ID および名前を含むように XML を構成することもできます。
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
結果を次に示します。
<NoOfWorkStations ProductModelID="7"
ProductModelName="HL Touring Frame">6</NoOfWorkStations>
XML 以外にも、次のクエリで示すように xml 以外の型で値を返すことができます。ワーク センターの場所の数を取得するために value() メソッド (xml データ型) を使用しています。
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
結果を次に示します。
ProductModelID Name WorkCtrCount
-------------- ---------------------------------
7 HL Touring Frame 6