miércoles, 27 de agosto de 2014

Receta T-SQL No. 1-15: Orden de los Resultados a partir de una Columna No Seleccionada

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En la receta T-SQL inmediatamente anterior aprendimos a especificar el orden de los resultados a partir de una o varias de las columnas enumeradas en la cláusula SELECT; ahora veremos que no es mandatorio recurrir a una de las columnas presentes en la cláusula SELECT para ordenar los resultados generador por la consulta.

1. Problema

Requerimos ordenar los resultados de una consulta dada a partir de uno o varios de las columnas pertenecientes a una determinada tabla, pero que no necesariamente está(n) especificada(s) en la cláusula SELECT.

2. Solución

Sobre la cláusula ORDER BY también es posible especificar cualquiera de las columnas (campos o atributos) de la tabla (o tablas) sobre la que queremos realizar la consulta; siempre y cuando éstas existan.

3. Discusión de la Solución

Especificar una de las columnas existentes sobre la cláusula ORDER BY [2], se efectúa de forma natural y simple como las demás columnas enumeradas en la cláusula SELECT [3]. En el caso del siguiente ejemplo:

SELECT p.name
FROM Production.Product AS p
ORDER BY p.Color;

Notemos cómo referenciamos al atributo Color de la tabla Product (renombrada como p) sobre la cláusula ORDER BY. (Desde luego este proceso de ORDER BY no tiene nada nuevo respecto al tema estudiado y practicado en la receta T-SQL Especificación de Criterios de Búsqueda de Registros en una Tabla.)

Una vez ejecutemos esta consulta sobre el motor de base de datos de SQL Server, los resultados obtenidos serán (sólo los trece primeros):
Especificación orden con columna no seleccionada.
Figura 1. Especificación orden con columna no seleccionada.
Por otro lado, debemos tener en cuenta la advertencia de uso de columnas no enumeradas enunciada en [1]:
«One caveat when ordering by unselected columns is that ORDER BY items must appear in the SELECT list if SELECT DISTINCT is specified...»

4. Práctica: Código T-SQL

Creemos una consulta para recuperar aquellos productos cuyo nombre empieza con la palabra 'Lock Washer%', y además deben estar ordenados de forma descendente por el campo ModifiedDate:

SELECT ProductID AS 'ID Producto', Name AS 'Nombre'
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ModifiedDate DESC;

Evidentemente, en la cláusula SELECT hemos omitido la enumeración de la columna ModifiedDate; sin embargo, esta ha sido especificada como columna de ordenamiento descendente en la cláusula ORDER BY.

En la Figura 2 se muestra el resultado de ejecución de esta consulta:
ORDER BY ModifiedDate
Figura 2. Ordenamiento por la columna ModifiedDate.

5. Conclusiones

Hemos aprendido algo útil para ordenar los resultados de una consula: especificación en ORDER BY de columna no enumerada en la clásula SELECT. Esto resulta útil cuando queremos prescindir de una o varias columnas en el resultado generado por la ejecución de una consulta. En la próxima receta comprenderemos y pondremos en práctica modos de ordenamiento forzados.

6. Glosario

  • Cláusula
  • Consulta
  • ORDER BY
  • SELECT
  • SQL Server
  • T-SQL
  • WHERE

7. Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: ORDER BY Clause (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms188385.aspx
[3]: SELECT (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms189499.aspx


S

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.