次の方法で共有


count 関数 (XQuery)

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

構文

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

引数

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

説明

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

使用例

このトピックでは、AdventureWorks データベースのさまざまな xml 型の列に格納されている XML インスタンスに対して実行する XQuery の例について説明します。

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   

関連項目

参照

xml データ型に対する XQuery 関数