Suma funkcji (XQuery)
Zwraca sumę sekwencji liczb.
Składnia
fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType
Argumenty
- $arg
Sekwencja wartości niepodzielny, którego suma ma być obliczona.
Uwagi
Wszystkie rodzaje atomized wartości, które są przekazywane do sum() musi być podtypów tego samego typu podstawowego.Typy podstawowe, które są akceptowane są trzy numeryczne wbudowanych typów podstawowych lub xdt:untypedAtomic.Wartości typu xdt:untypedAtomic są rzutowane na xs:double.Jeśli mieszanki te typy lub inne wartości inne typy są przekazywane jest wywoływane statyczne błąd.
Wynik sum() odbiera typu podstawowego przekazanego typów, takich jak xs:double w przypadek z xdt:untypedAtomic, nawet jeśli dane wejściowe są opcjonalnie pusty sekwencji.Jeśli dane wejściowe są statycznie puste, to wynik jest równy 0 w statycznych i dynamicznych typu xs:integer.
Sum() funkcja zwraca sumę wartości liczbowych.Jeśli wartość xdt:untypedAtomic nie można rzutować na xs:double, wartość jest ignorowana w sekwencji wejściowych $arg.Dane wejściowe są dynamicznie obliczeniowe sekwencji puste, zwracana jest wartość 0 używany typ bazowy.
Funkcja zwraca błąd wykonania podczas przepełnienie lub z zakres występuje wyjątek.
Przykłady
W tym temacie przedstawiono przykłady XQuery przeciwko wystąpień XML, które są przechowywane w różnych xml wpisz kolumn w AdventureWorks2008R2 bazy danych.Przegląd tych kolumn, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.
A.Przy użyciu funkcja XQuery sum(), aby znaleźć Scalonej całkowita liczba godzin robociznę dla wszystkich lokalizacji Centrum pracy w procesie wytwarzania
Następująca kwerenda powoduje znalezienie godzin Całkowita robocizna dla wszystkich lokalizacji Centrum pracy w procesie produkcji wszystkich modeli produktu, dla którego instrukcje wytwarzania są przechowywane.
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
Jest to wynik częściowy.
<ProductModel PMID="7" ProductModelName="HL Touring Frame">
<TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
<TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...
Zamiast zwracać wynik jako XML, można napisać kwerendę do generowania wyniki relacyjnych, jak pokazano w następującej kwerendzie:
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
Jest to wynik częściowy:
ProductModelID Name TotalLaborHours
-------------- -------------------------------------------------
7 HL Touring Frame 12.75
10 LL Touring Frame 13
43 Touring Rear Wheel 3
...
Ograniczenia wdrażania
Są następujące ograniczenia:
Tylko jeden argument wersja sum() jest obsługiwany.
Jeśli dane wejściowe są dynamicznie obliczeniowe sekwencji puste, zamiast typu xs:integer zwracana jest wartość 0 używanego typu podstawowego.
Sum() funkcja odwzorowuje wszystkie liczby całkowite xs:decimal.
Sum() nie jest obsługiwana funkcja na wartości typu xs: Duration.
Sekwencje wymieszać typów granicami typu podstawowego nie są obsługiwane.
Sum((xs:double("INF"), xs:double("-INF"))) podnosi błąd domena.