PDA

Ver la Versión Completa : ORDER BY {order_by_expression}


Cabanyaler
03-01-2007, 12:02:28
Hola compañeros.

¿Que tengo?
Tengo una serie de consultas realizadas en Store procedures en el lado del servidor.
Estas consultas tienen sus resultados ordenados según la clausula ORDER BY escrita del siguiente modo
select Campo1, Campo2, Campo3, Campo4
from T1
order by Campo1
De este modo el usuario tiene siempre el conjunto de datos del resultado de la ejecución de la consulta ordenado por el mismo campo.

¿Que deseo?
Quiero hacer lo siguiente: Que el usuario pueda establecer para la misma consulta el campo por el cual desea tener ordenado el conjunto de datos de forma dinámica.Es decir, poder pasar de alguna manera un parametro donde desde el programa el usuario establezca el campo deseado que establezca el orden.

He visto que se pueden utilizar ORDER BY {order_by_expression}, de este modo si quiero ordenar por el campo segundo de la lista de selección de la SELECT, lo haría así

select Campo1, Campo2, Campo3, Campo4
from T1
order by 2

pero estoy viendo como poderlo usar y su sintaxis para que ese "by 2", pueda ser como un parametro del tipo "by @ParametroDeOrden" y asignarle a ese parametro @ParametroDeOrden cualquiera de los valores 1,2,3,4 y de ese modo tener dinámico el orden.

Si alguien me puede anexar de forma resumida, o como sea, un ejemplo o explicación de como hacerlo..... Mientras yo buscaré en la web, y en el momento lo tenga solucionado, publicaré como lo puedo hacer.

Nota: Sé que lo podría conseguir utilizando la creación desde el código de programa de una SQL y añadiendo a la sintaxis de la clausula ORDER BY el campo deseado, pero al tenerlo en el lado servidor y tratarse de muchas consultas, preferiría hacerlo del modo que busco en esta consulta.

Gracias a todos, y un saludo.

Cabanyaler
03-01-2007, 13:55:36
Bueno a falta de conocer como pasarlo como parametro, esta es la mejor "y única" forma que he visto para hacerlo. Aunque no me mola mucho, ya que el orden se establece en el lado cliente, con el consecuente coste de proceso. :o


VCL Reference
TCustomADODataSet.Sort

TCustomADODataSet See also

Specifies the sort order of the recordset.

property Sort: WideString;

Description

Set Sort to establish or change the list of fields on which the recordset is sorted. Set sort to the name of a single field or to a comma-separated list of fields. Each field may optionally be followed by the keyword ASCENDING or DESCENDING to specify a sort direction for the field. If one of these keywords is not used, the default sort direction for the field is ascending. Set Sort to an empty string to reset the recordset to the sort order originally used when the recordset’s data was first retrieved.

ADOQuery1.Sort := 'LastName ASC, DateDue DESC'

Read Sort to determine the field (or fields) on which the recordset is sorted.

Note: If the cursor is client-side (the dataset component’s CursorLocation property or that of an associated TADOConnection component is clUseClient) and no index already exists matching the requested field sort order, a temporary index is created. Resetting the sort order by setting Sort to an empty string automatically deletes the temporary index.


No obstante si sabeis, conoceis, os han contado..... otra solución como la que yo busco..., gracias

Cabanyaler
04-01-2007, 10:32:08
También lo podría realizar pasando un parametro de tipo numérico y utilizar una estructura "if then else" para establecer según el valor de ese parametro un "ORDER BY" u otro.