Предложение ORDER IN GROUP

Предложение ORDER IN GROUP используется вместе с инструкцией GROUP ON, которая возвращает результирующие наборы в группах. Предложение ORDER IN GROUP позволяет отсортировать каждую возвращаемую группу по-разному. Если вы группируетесь в System.Kind, например, можно сортировать все документы по System.Document.LastAuthor, всем музыкальным файлам по System.Music.AlbumArtist и всем сообщениям электронной почты по System.Message.FromName.

Синтаксис

Ниже приведен синтаксис предложения ORDER IN GROUP:

GROUP ON <group column and optional ranges>
OVER (SELECT ... FROM SystemIndex
    ORDER 
        IN GROUP '<group name>' BY <column> [<direction>] [,<column> [<direction>]]
        [IN GROUP '<group name>' BY <column> [<direction>] [,<column> [<direction>]] ]
        [BY <column> [<direction>] [,<column> [<direction>]] ])

Описатель имени группы — это диапазон или известное значение из столбца группы, как указано в инструкции GROUP ON. Например, известные значения System.Photo.ISOSpeed включают ISO-100, ISO-200 и т. д. Диапазон для System.Photo.DateTaken будет включать "2006-1-1" и "2007-1-1" для инструкции, например GROUP ON System.ItemDate ['2006-1-1', '2007-1-1'].

Описатель столбца должен быть допустимым столбцом, указанным в инструкции GROUP ON или SELECT. Можно включить несколько столбцов, разделенных запятыми. Например, если вы группируетесь в System.Photo.ISOSpeed, можно сортировать все фотографии ISO-100, сначала System.Photo.ShutterSpeed, а затем System.Photo.Aperture.

Необязательный описатель направления может быть asC для возрастания (низкого до высокого) или DESC для убывание (высокий до низкого). Если не указать описатель направления, используется значение по умолчанию, возрастание. Если указать несколько столбцов, но не указывать все направления, то направление, указываемое последним, применяется к каждому последовательному столбцу, пока не будет явно изменено направление.

Диапазоны или значения, которые явно не указаны в предложении ORDER GROUP IN, отсортированы по возрастанию по значениям в столбце GROUP ON.

Примеры

В следующем примере группы результатов по свойству System.Kind. Запрос будет упорядочить группу "program" по имени приложения и группе "музыка" по названию альбома и номеру трека. Группа NULL будет упорядочена по имени элемента. Все остальные группы будут упорядочены по дате элемента.

GROUP ON System.Kind 
OVER (SELECT System.ItemUrl, System.Music.AlbumTitle, System.Music.TrackNumber, System.ItemName, System.ItemDate, System.Kind FROM SystemIndex
    ORDER 
        IN GROUP 'program' BY System.ApplicationName ASC
        IN GROUP 'music' BY System.Music.AlbumTitle ASC, System.Music.TrackNumber ASC
        IN GROUP NULL BY System.ItemName
        BY System.ItemDate DESC)

Следующий пример группирует результаты по свойству System.ItemDate, а затем сортирует каждую группу по URL-адресу элемента, типу или имени.

GROUP ON System.ItemDate ['2006-1-1', '2007-1-1', '2008-1-1'] 
OVER (SELECT System.ItemUrl, System.ItemName, System.ItemDate System.Kind FROM SystemIndex
    ORDER 
        IN GROUP MINVALUE BY System.ItemUrl ASC
        IN GROUP '2007-1-1' BY System.Kind
        IN GROUP NULL BY System.ItemName)

Результаты предыдущего запроса будут возвращены в пяти группах и отсортированы, как описано в следующей таблице.

Группа Описание Сортировка по
MINVALUE Элементы с датами до 2006-1-1 Сортировка по URL-адресу элемента в порядке возрастания
2006-1-1 Элементы с датами в 2006-1-1, но до 2007-1-1 Сортировка по дате элемента в порядке возрастания
2007-1-1 Элементы с датами или после 2007-1-1, но до 2008-1-1 Сортировка по типу в порядке возрастания
2008-1-1 Элементы с датами или после 2008-1-1 Сортировка по дате элемента в порядке возрастания
NULL Элементы без значения в столбце System.ItemDate Сортировка по имени элемента в порядке возрастания

 

Справочник

GROUP ON ... НАД... Оператор

предложение ORDER BY