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 |
Temas relacionados