Поделиться через


Агрегатные функции — count

Применимо к:SQL Server

Возвращает количество элементов, содержащихся в последовательности, указанной $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  

Обратите внимание на следующие данные из предыдущего запроса:

  • Ключевое слово пространства имен в XQuery Prolog определяет префикс пространства имен. Затем этот префикс используется в теле запроса 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     

См. также

Функции XQuery для типа данных XML