Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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.