Compartilhar via


Cláusula ORDER IN GROUP

A cláusula ORDER IN GROUP é usada em conjunto com a instrução GROUP ON , que retorna conjuntos de resultados em grupos. A cláusula ORDER IN GROUP permite que você classifique cada grupo retornado de uma maneira diferente. Se você agrupar em System.Kind, por exemplo, poderá classificar todos os documentos por System.Document.LastAuthor, todos os arquivos de música por System.Music.AlbumArtist e todos os emails por System.Message.FromName.

Sintaxe

Veja a seguir a sintaxe da cláusula 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>]] ])

O especificador de nome de grupo é um intervalo ou valor conhecido da coluna de grupo, conforme especificado na instrução GROUP ON. Por exemplo, os valores conhecidos de System.Photo.ISOSpeed incluiriam 'ISO-100', 'ISO-200' e assim por diante. Um intervalo para System.Photo.DateTaken incluiria '2006-1-1' e '2007-1-1' para uma instrução como GROUP ON System.ItemDate ['2006-1-1', '2007-1-1'].

O especificador de coluna deve ser uma coluna válida especificada na instrução GROUP ON ou SELECT. Você pode incluir mais de uma coluna, separada por vírgulas. Por exemplo, se você agrupar em System.Photo.ISOSpeed, poderá classificar todas as fotos ISO-100, primeiro por System.Photo.ShutterSpeed e, em seguida, por System.Photo.Aperture.

O especificador de direção opcional pode ser ASC para crescente (baixo para alto) ou DESC para decrescente (alto para baixo). Se você não fornecer um especificador de direção, o padrão, crescente, será usado. Se você especificar mais de uma coluna, mas não especificar todas as direções, a direção especificada por último será aplicada a cada coluna sucessiva até que você altere explicitamente a direção.

Intervalos ou valores que não são especificados explicitamente em uma cláusula ORDER GROUP IN são classificados em ordem crescente pelos valores na coluna GROUP ON.

Exemplos

O exemplo a seguir agrupa os resultados pela propriedade System.Kind. A consulta ordenaria o grupo 'program' pelo nome do aplicativo e o grupo 'música' pelo título do álbum e pelo número da faixa. O grupo NULL seria ordenado pelo nome do item. Todos os outros grupos seriam ordenados pela data do item.

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)

O exemplo a seguir agrupa os resultados pela propriedade System.ItemDate e, em seguida, classifica cada grupo por URL de item, tipo ou nome.

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)

Os resultados da consulta anterior seriam retornados em cinco grupos e classificados conforme descrito na tabela a seguir.

Grupo Descrição Classificado por
MINVALUE Itens com datas anteriores a 2006-1-1 Classificado pela URL do item, em ordem crescente
2006-1-1 Itens com datas em ou após 2006-1-1, mas antes de 2007-1-1 Classificado por data de item, em ordem crescente
2007-1-1 Itens com datas em ou após 2007-1-1, mas antes de 2008-1-1 Classificado por valor de tipo, em ordem crescente
2008-1-1 Itens com datas em ou após 2008-1-1 Classificado por data de item, em ordem crescente
NULL Itens sem valor na coluna System.ItemDate Classificado por nome do item, em ordem crescente

 

Referência

GROUP ON ... SOBRE... Declaração

Cláusula ORDER BY