count 関数 (XQuery)

$arg で指定したシーケンスに含まれるアイテムの数を返します。

構文

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

引数

  • $arg
    カウントするアイテム。

説明

$arg が空シーケンスの場合、0 を返します。

このトピックでは、AdventureWorks2008R2 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks2008R2 データベースの 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