sum 函數 (XQuery)

傳回數字序列的總和。

語法

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

引數

  • $arg
    將計算其總和之不可部份完成值的順序。

備註

傳遞到 sum() 之不可部份完成值的所有類型,必須為相同基底類型的子類型。可接受的基底類型為三個內建的數值基底類型或 xdt:untypedAtomic。xdt:untypedAtomic 類型的值會轉換為 xs:double。如果混合了這些類型,或傳遞了其他類型的其他值,則會引發靜態錯誤。

sum() 的結果會收到所傳入類型的基底類型,例如 xdt:untypedAtomic 的狀況會收到 xs:double,即使輸入為選擇性的空序列也是如此。如果輸入在靜態上是空的,則結果是 0,並具有靜態和動態的 xs:integer 類型。

sum() 函數會傳回數值的總和。如果 xdt:untypedAtomic 值無法轉換為 xs:double,則會忽略輸入序列 $arg 中的這個值。如果輸入是動態計算出的空序列,則會傳回所用基底類型的值 0。

發生溢位或超出範圍的例外狀況時,此函數會傳回執行階段錯誤。

範例

本主題針對儲存在 AdventureWorks 資料庫中之各種 xml 類型資料行的 XML 執行個體,提供 XQuery 範例。如需這些資料行中每個資料行的概觀,請參閱<在 AdventureWorks 資料庫中的 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                     
...

實作限制

以下這些是限制:

  • 只支援 sum() 的單一引數版本。

  • 如果輸入是動態計算出的空序列,則會傳回所用基底類型的值 0,而不是 xs:integer 類型。

  • sum() 函數會將所有整數對應到 xs:decimal。

  • 不支援值為 xs:duration 類型的 sum() 函數。

  • 不支援在基底類型界限之間混合類型的序列。

  • sum((xs:double(“INF”), xs:double(“-INF”))) 會引發值域錯誤。