Share via


Aggregatiefuncties - sommen

Van toepassing op:SQL Server

Geeft de som van een reeks getallen terug.

Syntaxis

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

Arguments

$arg
Reeks atomaire waarden waarvan de som berekend moet worden.

Opmerkingen

Alle typen van de geatomiseerde waarden die aan som() worden doorgegeven, moeten subtypes van hetzelfde basistype zijn. Basistypes die worden geaccepteerd zijn de drie ingebouwde numerieke basistypes of xdt:untypedAtomic. Waarden van het type xdt:untypedAtomic worden omgezet in xs:double. Als er een combinatie van deze typen is of als andere waarden van andere typen worden doorgegeven, wordt er een statische fout gegenereerd.

Het resultaat van sum() ontvangt het basistype van de doorgegeven types zoals xs:double in het geval van xdt:untypedAtomic, zelfs als de invoer optioneel de lege reeks is. Als de invoer statisch leeg is, is het resultaat 0 met het statische en dynamische type xs:integer.

De som()- functie geeft de som van de numerieke waarden terug. Als een xdt:untypedAtomic-waarde niet kan worden gecast naar xs:double, wordt de waarde genegeerd in de invoerreeks, $arg. Als de invoer een dynamisch berekende lege reeks is, wordt de waarde 0 van het gebruikte basistype teruggegeven.

De functie geeft een runtime-fout wanneer er een overflow of out-of-range uitzondering optreedt.

Voorbeelden

Dit onderwerp bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml- typekolommen in de AdventureWorks2025-database.

Eén. Met de sum()XQuery-functie wordt het totale aantal arbeidsuren voor alle werkcentralocaties in het productieproces gevonden

De volgende vraag vindt het totale aantal arbeidsuren voor alle werkcentralocaties in het productieproces van alle productmodellen waarvoor productie-instructies worden opgeslagen.

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         

Dit is het gedeeltelijke resultaat.

<ProductModel PMID="7" ProductModelName="HL Touring Frame">  
   <TotalLaborHrs>12.75</TotalLaborHrs>  
</ProductModel>  
<ProductModel PMID="10" ProductModelName="LL Touring Frame">  
  <TotalLaborHrs>13</TotalLaborHrs>  
</ProductModel>  
...  

In plaats van het resultaat als XML terug te geven, kun je de query schrijven om relationele resultaten te genereren, zoals getoond in de volgende query:

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          

Dit is een gedeeltelijk resultaat:

ProductModelID Name                 TotalLaborHours         
-------------- -------------------------------------------------  
7              HL Touring Frame           12.75                   
10             LL Touring Frame           13                      
43             Touring Rear Wheel         3                       
...  

Implementatiebeperkingen

Dit zijn de beperkingen:

  • Alleen de versie van sum() met één argument wordt ondersteund.

  • Als de invoer een dynamisch berekende lege reeks is, wordt de waarde 0 van het gebruikte basistype teruggegeven in plaats van type xs:integer.

  • De som() -functie beeldt alle gehele getallen af naar xs:decimaal.

  • De som()- functie op waarden van type xs:duration wordt niet ondersteund.

  • Reeksen die typen combineren tussen basistypegrenzen worden niet ondersteund.

  • De som((xs:double("INF"), xs:double("-INF"))) veroorzaakt een domeinfout.

Zie ook

XQuery-functies op basis van het xml-gegevenstype