分享方式:


彙總函式 - sum

適用於:SQL Server

傳回數位序列的總和。

語法

  
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。

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

範例

本主題針對儲存在資料庫中各種 xml 類型資料行中的 AdventureWorks2022 XML 實例,提供 XQuery 範例。

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」)))引發網域錯誤。

另請參閱

針對 xml 資料類型的 XQuery 函式