sum 関数 (XQuery)

一連の数値の合計を返します。

構文

fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType

引数

  • $arg
    合計が計算される、一連のアトミック値。

説明

sum() に渡されるアトミック値のすべての型は、同じ基本データ型のサブタイプである必要があります。使用できる基本データ型は、3 つの組み込みの数値基本データ型または xdt:untypedAtomic です。xdt:untypedAtomic 型の値は、xs:double にキャストされます。これらの型が混在している場合、または他の型の他の値が渡された場合は、静的エラーが発生します。

入力がオプションで空のシーケンスであったとしても、xdt:untypedAtomic の場合、sum() の結果は xs:double など、渡された型の基本データ型を受け取ります。入力が静的に空の場合、結果は静的な型および動的な型 xs:integer の 0 になります。

sum() 関数は、数値の合計を返します。xdt:untypedAtomic 値が xs:double にキャストされない場合、入力シーケンス $arg では値は無視されます。入力が動的に計算された空のシーケンスの場合、使用されている基本データ型の値 0 が返されます。

オーバーフローまたは範囲外の例外が発生したとき、関数はランタイム エラーを返します。

このトピックでは、AdventureWorks2008R2 データベースのさまざまな xml 型の列に格納されている XML インスタンスに対する XQuery の例について説明します。これらの各列の概要については、「AdventureWorks2008R2 データベースの xml データ型表現」を参照してください。

A. sum() XQuery 関数を使用した、製造プロセス内のすべてのワーク センターの場所での合計労働時間の計算

次のクエリでは、製造手順が格納されているすべての製品モデルの製造プロセスにおける、すべてのワーク センターの場所での合計労働時間を計算します。

SELECT Instructions.query('       
   declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";       
  <ProductModel PMID= "{ sql:column("Production.ProductModel.ProductModelID") }"       
  ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >       
   <TotalLaborHrs>       
     { sum(//AWMI:Location/@LaborHours) }       
   </TotalLaborHrs>       
 </ProductModel>       
    ') as Result       
FROM Production.ProductModel       
WHERE Instructions is not NULL       

次に結果の一部を示します。

<ProductModel PMID="7" ProductModelName="HL Touring Frame">
   <TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
  <TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...

結果を XML として返す代わりに、次のクエリに示すように、リレーショナル結果を生成するクエリを記述できます。

SELECT ProductModelID,       
        Name,       
        Instructions.value('declare namespace 
      AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";       
    sum(//AWMI:Location/@LaborHours)', 'float') as TotalLaborHours       
FROM Production.ProductModel       
WHERE Instructions is not NULL        

次に結果の一部を示します。

ProductModelID Name                 TotalLaborHours       
-------------- -------------------------------------------------
7              HL Touring Frame           12.75                 
10             LL Touring Frame           13                    
43             Touring Rear Wheel         3                     
...

実装の制限事項

次に、制限事項を示します。

  • 1 つの引数を使用する sum() のみがサポートされています。

  • 入力が動的に計算された空のシーケンスである場合、xs:integer 型ではなく、使用されている基本データ型の値 0 が返されます。

  • sum() 関数では、すべての整数が xs:decimal にマップされます。

  • xs:duration 型の値では、sum() 関数はサポートされません。

  • 基本データ型の境界をまたがってデータ型が混在するシーケンスはサポートされません。

  • sum((xs:double(“INF”), xs:double(“-INF”))) ではドメイン エラーが発生します。