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