Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Returnerar summan av en sekvens med tal.
Syntax
fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType
Argument
$arg
Sekvens med atomiska värden vars summa ska beräknas.
Anmärkningar
Alla typer av atomiserade värden som skickas till sum() måste vara undertyper av samma bastyp. Bastyper som accepteras är de tre inbyggda numeriska bastyperna eller xdt:untypedAtomic. Värden av typen xdt:untypedAtomic omvandlas till xs:double. Om det finns en blandning av dessa typer, eller om andra värden av andra typer skickas, utlöses ett statiskt fel.
Resultatet av sum() tar emot bastypen för de skickade typerna, till exempel xs:double när det gäller xdt:untypedAtomic, även om indata eventuellt är den tomma sekvensen. Om indata är statiskt tomma blir resultatet 0 med den statiska och dynamiska typen xs:heltal.
Funktionen sum() returnerar summan av de numeriska värdena. Om ett xdt:untypedAtomic-värde inte kan omvandlas till xs:double ignoreras värdet i indatasekvensen $arg. Om indata är en dynamiskt beräknad tom sekvens returneras värdet 0 för den använda bastypen.
Funktionen returnerar ett körningsfel när ett spill eller ett undantagsfel som ligger utom intervallet inträffar.
Exempel
Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika XML- typkolumner i AdventureWorks2022-databasen.
A. Använda funktionen sum() XQuery för att hitta det totala sammanlagda antalet arbetstimmar för alla platser i produktionscentret i tillverkningsprocessen
Följande fråga hittar den totala arbetstimmarna för alla platser i arbetscentret i tillverkningsprocessen för alla produktmodeller som tillverkningsinstruktioner lagras för.
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
Det här är det partiella resultatet.
<ProductModel PMID="7" ProductModelName="HL Touring Frame">
<TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
<TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...
I stället för att returnera resultatet som XML kan du skriva frågan för att generera relationsresultat, som du ser i följande fråga:
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
Detta är ett partiellt resultat:
ProductModelID Name TotalLaborHours
-------------- -------------------------------------------------
7 HL Touring Frame 12.75
10 LL Touring Frame 13
43 Touring Rear Wheel 3
...
Implementeringsbegränsningar
Det här är begränsningarna:
Endast den enkla argumentversionen av sum() stöds.
Om indata är en dynamiskt beräknad tom sekvens returneras värdet 0 för den använda bastypen i stället för typ xs:heltal.
Funktionen sum() mappar alla heltal till xs:decimal.
Funktionen sum() för värden av typen xs:duration stöds inte.
Sekvenser som blandar typer över bastypsgränser stöds inte.
Sum((xs:double("INF"), xs:double("-INF")) genererar ett domänfel.