ORDER BY

4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 11 (Modificado)


ORDER BY ({tabla}{; Campo}{; > o <}{; Campo2; > o <2; ...; CampoN; > o <N}{; *})

ParámetroTipoDescripción
tablaTablaTabla para la cual ordenar los registros seleccionados o
Tabla por defecto si se omite
CampoCampo Campo en el cual efectuar la ordenación para cada nivel
> o <Sentido de la ordenación para cada nivel:
> para orden ascendente o
< para orden descendente
*Continua la bandera de ordenación

Descripción

ORDER BY ordena (reordena) los registros de la selección actual de tabla para el proceso actual. Una vez efectuada la ordenación, el primer registro de la nueva selección actual se convierte en el registro actual.

Si omite el parámetro tabla, el comando se aplica a la tabla por defecto. Si no se ha definido una tabla por defecto, se genera un error.

Si no especifica el parámetro campo, ni los parámetros > o < o, ORDER BY muestra la caja de diálogo Ordenar de 4D para tabla. Esta es la caja de diálogo del editor:

Para mayor información sobre la utilización del editor de ordenación, consulte el Manual de diseño de 4D.

El usuario construye la ordenación, luego hace clic en el botón ordenar para realizar la ordenación. Si la ordenación se realiza correctamente, la variable OK toma el valor 1. Si el usuario hace clic en Cancelar, ORDER BY termina sin efectuar la ordenación, y la variable OK toma el valor 0 (cero).

Ejemplos

1. El siguiente ejemplo muestra la caja de diálogo Ordenar para la tabla [Productos]:

   ORDER BY([Productos])

2. El siguiente ejemplo muestra la caja de diálogo Ordenar para la tabla por defecto (si ha sido definida):

   ORDER BY

Si especifica los parámetros campo y > o < , la caja de diálogo estándar Ordenar no se presenta y la ordenación se define por programación. Puede ordenar la selección en uno o varios niveles. Para cada nivel de ordenación, usted especifica un campo en el parámetro campo y un orden en > o <. Si pasa el parámetro "mayor que" (>), el orden es ascendente. Si pasa el símbolo "menor que" (<), el orden es descendente.

Ejemplos

3. El ejemplo siguiente ordena la selección actual de [Productos] por nombre en orden ascendente:

   ORDER BY([Productos];[Productos]Nombre;>)

4. El siguiente ejemplo ordena la selección actual de [Productos] por nombre en orden descendente:

   ORDER BY([Productos];[Productos]Nombre;<)

5. La línea siguiente ordena la selección de [Productos] por tipo y precio en orden ascendente para ambos niveles:

   ORDER BY([Productos];[Productos]Tipo;>;[Productos]Precio;>)

6. El siguiente ejemplo ordena la selección actual de [Productos] por tipo y precio en orden descendente para ambos niveles:

   ORDER BY([Productos];[Productos]Tipo;<;[Productos]Precio;<)

7. El siguiente ejemplo ordena la selección actual de [Productos] por tipo en orden ascendente y por precio en orden descendente:

   ORDER BY([Productos];[Productos]Tipo;>;[Productos]Precio;<)

8. El siguiente ejemplo ordena la selección actual de [Productos] por tipo en orden descendente y por precio en orden ascendente:

   ORDER BY([Productos];[Productos]Tipo;<;[Productos]Precio;>)

Si omite el parámetro de ordenación > o <, por defecto el orden es ascendente.

Ejemplo

9. El siguiente ejemplo ordena la selección actual de [Productos] por nombre en orden ascendente:

   ORDER BY([Productos];[Productos]Nombre)

Si sólo se especifica un campo (un nivel de ordenación) y está indexado, el índice se utiliza para la ordenación. Si el campo no está indexado o si hay más de un campo, la ordenación se lleva a cabo de manera secuencial (excepto en el caso de los índices compuestos). El campo puede pertenecer a la tabla de la selección que está siendo reordenada o a una tabla Uno relacionada a tabla con una relación manual o automática. (Recuerde, la tabla a la cual se aplica ORDER BY debe ser la tabla Muchos). En este caso, la ordenación es siempre secuencial.

Si los campos ordenados se incluyen en un índice compuesto, ORDER BY utiliza el índice para la ordenación.

Ejemplos

10. El siguiente ejemplo efectúa una ordenación indexada si el campo [Productos]Nombre está indexado:

   ORDER BY([Productos];[Productos]Nombre;>)

11. El siguiente ejemplo efectúa una ordenación secuencial, sin importar si los campos están indexados:

   ORDER BY([Productos];[Productos]Tipo;>;[Productos]Precio;>)

12. El siguiente ejemplo efectúa una ordenación secuencial utilizando un campo relacionado:

   ORDER BY([Facturas];[Empresas]Nombre;>) ` Las facturas son ordenadas alfabéticamente por el campo Nombre de la empresa

13. El siguiente ejemplo realiza una ordenación indexada en dos niveles si un índice compuesto se ha especificado en la base [Contactos]Apellidos + [Contactos]Nombre:

   ORDER BY([Contactos];[Contactos]Apellido;> ;[Contactos]Nombre;>) 
Para realizar ordenaciones múltiples (ordenación en múltiples campos), puede llamar ORDER BY tantas veces como sea necesario y especificar el parámetro opcional *, excepto para la última llamada a ORDER BY, la cual inicia la operación de ordenación real. Esta funcionalidad es útil para administrar ordenaciones múltiples en interfaces de usuario personalizadas.

Advertencia: con esta sintaxis, usted puede pasar únicamente un nivel de ordenación (campo) por línea de instrucción.

Ejemplo

14. En un formulario de salida mostrado en modo Aplicación, usted le permite a los usuarios ordenar una columna en orden creciente simplemente haciendo clic en el encabezado de la columna. Si el usuario mantiene presionada la tecla Mayús mientras hace clic en otros encabezados de columnas, la ordenación se lleva a cabo en varios niveles:

Cada encabezado de columna contiene un botón resaltado asociado con el siguiente método de objeto:

   MULTINIVEL (->[CDs]Titulo)   `Botón del encabezado de la columna título

Cada botón llama al método de proyecto MULTINIVEL pasando un puntero al campo de la columna correspondiente. El método de proyecto MULTINIVEL es el siguiente:

      ` Método de proyecto MULTINIVEL
      ` MULTINIVEL(Puntero)
      ` MULTINIVEL(->[Tabla]Campo)

   C_POINTER($1)  `Nivel de ordenación (campo)
   C_LONGINT($lNivelNb)

      `Construcción de criterios
   If (Not(Shift down))  `Ordenación simple (un nivel)
      ARRAY POINTER(aPtrCampoOrden;1)
      aPtrCampoOrden{1}:=$1
   Else 
      $lNivelNb:=Find in array(aPtrCampoOrden;$1)  `¿Ya está ordenado este campo?
      If ($lNivelNb<0)  `Si no
         INSERT IN ARRAY(aPtrCampoOrden;Size of array(aPtrCampoOrden)+1;1)
         aPtrCampoOrden{Size of array(aPtrCampoOrden)}:=$1
      End if 
   End if 
      `Ejecución de la ordenación
   $lNivelNb:=Size of array(aPtrCampoOrden)
   If ($lNivelNb>0)  `Hay por lo menos un nivel de ordenación
      For ($i;1;$lNivelNb)
         ORDER BY([CDs];(aPtrCampoOrden{$i})->;>;*)  `Construir la ordenación
      End for 
      ORDER BY([CDs])  `No * termina la definición de la ordenación y comienza la operación de ordenación actual.
   End if 

Sin importar cómo se defina la ordenación, si la operación de ordenación va a tomar algún tiempo, 4D muestra automáticamente un mensaje que contiene un termómetro de progresión. Estos mensajes pueden activarse y desactivarse utilizando los comandos MESSAGES ON y MESSAGES OFF. Si se muestra el termómetro de progreso, el usuario puede hacer clic en el botón Detener para interrumpir la ordenación. Si la ordenación se termina correctamente, OK toma el valor 1. De lo contrario, si la ordenación se interrumpe OK toma el valor 0 (cero).

Ver también

ORDER BY FORMULA.


4D - Documentation   Français   English   German   Español   English   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente