count (XQuery)
Возвращает количество элементов, содержащихся в последовательности, указываемой аргументом $arg.
Синтаксис
fn:count($arg as item()*) as xs:integer
Аргументы
- $arg
Подсчитываемые элементы.
Замечания
Возвращает 0, если $arg — пустая последовательность.
Примеры
В этом разделе приведены примеры запросов XQuery к экземплярам XML, которые хранятся в различных столбцах типа xml в базе данных AdventureWorks.
А.Использование функции XQuery count() для подсчета количества различных географических расположений цехов, участвующих в производстве определенной модели продукта
Следующий запрос подсчитывает количество цехов, участвующих в производстве продукта определенной модели (ProductModelID=7).
SELECT Production.ProductModel.ProductModelID,
Production.ProductModel.Name,
Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<NoOfWorkStations>
{ count(/AWMI:root/AWMI:Location) }
</NoOfWorkStations>
') as WorkCtrCount
FROM Production.ProductModel
WHERE Production.ProductModel.ProductModelID=7
В приведенном запросе обратите внимание на следующие моменты.
Ключевое слово namespace в прологе XQuery определяет префикс пространства имен. Затем этот префикс используется в теле запроса XQuery.
Запрос создает XML, включающий элемент <NoOfWorkStations>.
Функция count() в теле запроса XQuery подсчитывает количество элементов <Location>.
Результат:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------------------------
7 HL Touring Frame <NoOfWorkStations>6</NoOfWorkStations>
Можно также создать XML, включающий идентификатор и название модели продукта, как это показано в следующем запросе:
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<NoOfWorkStations
ProductModelID= "{ sql:column("Production.ProductModel.ProductModelID") }"
ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
{ count(/AWMI:root/AWMI:Location) }
</NoOfWorkStations>
') as WorkCtrCount
FROM Production.ProductModel
WHERE Production.ProductModel.ProductModelID= 7
Результат:
<NoOfWorkStations ProductModelID="7"
ProductModelName="HL Touring Frame">6</NoOfWorkStations>
Эти значения можно вернуть в формате, отличном от XML, как показано в следующем запросе. Запрос использует метод value() (тип данных xml) для получения количества цехов.
SELECT ProductModelID,
Name,
Instructions.value('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
count(/AWMI:root/AWMI:Location)', 'int' ) as WorkCtrCount
FROM Production.ProductModel
WHERE ProductModelID=7
Результат:
ProductModelID Name WorkCtrCount
-------------- ---------------------------------
7 HL Touring Frame 6