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”))) 會引發值域錯誤。