Udostępnij przez


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.

Zobacz także

Odwołanie