Udostępnij za pośrednictwem


Suma funkcja (XQuery)

Zwraca sumę sekwencji liczb.

fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType

Argumenty

  • $arg
    Sekwencja rozproszonych wartości, których suma ma zostać obliczona.

Remarks

Wszystkie typy wartości rozproszonych, które są przekazywane do funkcji sum() muszą być podtypami tego samego typu podstawowego.Typy podstawowe, które są akceptowane, to trzy wbudowane podstawowe typy liczbowe lub typ xdt:untypedAtomic.Wartości typu xdt:untypedAtomic są rzutowane na typ xs:double.Jeśli wartości reprezentują różne typy spośród powyższych lub zostaną przekazane wartości innych typów, jest wywoływany błąd statyczny.

Wynik funkcji sum() odbiera typ podstawowy przekazanych typów, jak xs:double w przypadku typu xdt:untypedAtomic, nawet jeśli dane wejściowe są opcjonalnie sekwencją pustą.Jeśli dane wejściowe są statycznie puste, wynik wynosi 0 przy statycznym i dynamicznym typie danych xs:integer.

Funkcja sum() zwraca sumę wartości liczbowych.Jeśli nie można rzutować wartości xdt:untypedAtomic na typ xs:double, wartość jest ignorowana w sekwencji wejściowej, $arg.Jeśli dane wejściowe są dynamicznie obliczaną pustą sekwencją, zwracana jest wartość 0 użytego typu podstawowego.

Funkcja zwraca błąd środowiska uruchomieniowego, jeśli wystąpi przepełnienie lub wyjątek poza zakresem.

Przykłady

This topic provides XQuery examples against XML instances that are stored in various xml type columns in the AdventureWorks database.For an overview of each of these columns, see xml Data Type Representation in the AdventureWorks Database.

A.Użycie funkcji kwerendy XQuery sum() w celu znalezienia łącznej liczby godzin pracy wszystkich lokalizacji gniazd produkcyjnych w procesie produkcyjnym.

Następująca kwerenda znajdzie w procesie produkcyjnym łączną liczbę godzin pracy wszystkich lokalizacji gniazd produkcyjnych wszystkich modeli produktu, których instrukcje produkcyjne 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 zwracania wyniku w formacie XML można zapisać kwerendę na przykład w następujący sposób, aby były generowane wyniki relacyjne:

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                     
...

defaultButton

Ograniczenia są następujące:

  • Only the single argument version of sum() is supported.

  • Jeśli dane wejściowe są dynamicznie obliczaną pustą sekwencją, zwracana jest wartość 0 użytego typu podstawowego zamiast typu xs:integer.

  • Funkcja sum() mapuje wszystkie wartości całkowite na typ xs:decimal.

  • Funkcja sum() na wartościach typu xs:duration nie jest obsługiwana.

  • Wyliczanie określa przycisk domyślny dla wyjątku okna komunikatu.

  • Funkcja sum((xs:double(“INF”), xs:double(“-INF”))) wywołuje błąd domeny.