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


Предложение 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. Запрос упорядочит группу "программа" по имени приложения, а группу "музыка" — по названию альбома и номеру дорожки. Группа 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 Элементы с датами до 1.01.2006 Сортировка по URL-адресу элемента в порядке возрастания
2006-1-1 Элементы с датами на 1.01.2006 или позже, но до 1.01.2007 Сортировка по дате элемента в порядке возрастания
2007-1-1 Элементы с датами на 2007-1-1 или позже, но до 1-2008-1-1 Сортировка по значению типа в порядке возрастания
2008-1-1 Элементы с датами на 1.01.2008 или позже Сортировка по дате элемента в порядке возрастания
NULL Элементы без значения в столбце System.ItemDate Сортировка по имени элемента в порядке возрастания

 

Reference

GROUP ON ... НАД... Заявление

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