Compartir a través de


Cláusula ORDER IN GROUP

La cláusula ORDER IN GROUP se usa junto con la instrucción GROUP ON , que devuelve conjuntos de resultados en grupos. La cláusula ORDER IN GROUP permite ordenar cada grupo devuelto de una manera diferente. Si agrupa en System.Kind, por ejemplo, puede ordenar todos los documentos por System.Document.LastAuthor, todos los archivos de música por System.Music.AlbumArtist y todos los correos electrónicos por System.Message.FromName.

Syntax

A continuación se muestra la sintaxis de la 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>]] ])

El especificador de nombre de grupo es un intervalo o valor conocido de la columna de grupo, tal y como se especifica en la instrucción GROUP ON. Por ejemplo, los valores conocidos de System.Photo.ISOSpeed incluirían "ISO-100", "ISO-200", etc. Un intervalo para System.Photo.DateTaken incluiría "2006-1-1" y "2007-1-1" para una instrucción como GROUP ON System.ItemDate ['2006-1-1', '2007-1-1'].

El especificador de columna debe ser una columna válida especificada en la instrucción GROUP ON o SELECT. Puede incluir más de una columna, separada por comas. Por ejemplo, si agrupas en System.Photo.ISOSpeed, puedes ordenar todas las fotos ISO-100, primero por System.Photo.ShutterSpeed y luego por System.Photo.Aperture.

El especificador de dirección opcional puede ser ASC para ascendente (bajo a alto) o DESC para descendente (alto a bajo). Si no proporciona un especificador de dirección, se usa el valor predeterminado, ascendente. Si especifica más de una columna, pero no especifica todas las direcciones, la dirección que especifique en último lugar se aplicará a cada columna sucesiva hasta que cambie explícitamente la dirección.

Los rangos o valores que no se especifican explícitamente en una cláusula ORDER GROUP IN se ordenan en orden ascendente por los valores de la columna GROUP ON.

Ejemplos

En el ejemplo siguiente se agrupan los resultados por la propiedad System.Kind. La consulta ordenaría el grupo "program" por el nombre de la aplicación y el grupo "music" por título de álbum y número de pista. El grupo NULL se ordenaría por el nombre del elemento. Todos los demás grupos se ordenarían por la fecha del elemento.

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)

En el ejemplo siguiente se agrupan los resultados por la propiedad System.ItemDate y, a continuación, se ordena cada grupo por dirección URL de elemento, tipo o nombre.

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)

Los resultados de la consulta anterior se devolverían en cinco grupos y se ordenarían como se describe en la tabla siguiente.

Grupo Descripción Ordenado por
MINVALUE Elementos con fechas anteriores al 1-1-2006 Ordenado por la dirección URL del elemento, en orden ascendente
2006-1-1 Artículos con fechas en 2006-1-1 o después de 2007-1-1 Ordenado por fecha de elemento, en orden ascendente
2007-1-1 Elementos con fechas en 2007-1-1 o posteriores, pero antes de 2008-1-1 Ordenado por valor de tipo, en orden ascendente
2008-1-1 Artículos con fechas en 2008-1-1 o posteriores Ordenado por fecha de elemento, en orden ascendente
NULL Elementos sin ningún valor en la columna System.ItemDate Ordenado por nombre de elemento, en orden ascendente

 

Referencia

AGRUPAR EN ... SOBRE... Declaración

Cláusula ORDER BY