Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения:SQL Server
Возвращает сумму последовательности чисел.
Синтаксис
fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType
Аргументы
$arg
Последовательность атомарных значений, сумма которых должна быть вычислена.
Замечания
Все типы атомизованных значений, передаваемых в sum(), должны быть подтипами одного базового типа. Базовые типы, которые принимаются, — это три встроенных числовых базовых типа или тип xdt:untypedAtomic. Значения типа xdt:untypedAtomic приводятся к типу xs:double. Если имеется смесь этих типов или передаются значения других типов, возникает статическая ошибка.
Результат sum() получает базовый тип переданного типа в таких типах, как xs:double в случае xdt:untypedAtomic, даже если входные данные необязательно являются пустой последовательностью. Если вход статически пуст, результатом будет значение 0 со статическим и динамическим типом xs:integer.
Функция sum() возвращает сумму числовых значений. Если значение xdt:untypedAtomic не может быть приведение к xs:double, значение игнорируется в входной последовательности, $arg. Если вход — это динамически вычисленная пустая последовательность, будет возвращено значение 0 используемого базового типа.
Функция возвращает ошибку времени выполнения, если происходит переполнение или исключение выхода за пределы диапазона.
Примеры
В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типа XML в AdventureWorks2025 базе данных.
А. Использование функции языка XQuery sum() для определения полного количества рабочих часов для всех расположений цехов в производственном процессе
Следующий запрос находит общее количество трудовых часов для всех расположений цехов в производственном процессе всех моделей продукта, для которых сохранены производственные команды.
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
Частичный результат.
<ProductModel PMID="7" ProductModelName="HL Touring Frame">
<TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
<TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...
Вместо возврата результата в формате XML можно написать запрос для формирования относительных результатов, как показано в следующем запросе:
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
Частичный результат:
ProductModelID Name TotalLaborHours
-------------- -------------------------------------------------
7 HL Touring Frame 12.75
10 LL Touring Frame 13
43 Touring Rear Wheel 3
...
Ограничения реализации
Существуют следующие ограничения:
Поддерживается только одна версия аргумента sum( ).
Если вход — это динамически вычисленная пустая последовательность, будет возвращено значение 0 используемого базового типа вместо типа xs:integer.
Функция sum() сопоставляет все целые числа с xs:decimal.
Функция sum() для значений типа xs:duration не поддерживается.
не поддерживаются последовательности, в которых смешиваются типы на основе разных базовых типов;
Sum(xs:double("INF"), xs:double("-INF")) вызывает ошибку домена.