Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ordenar por una columna resultado de otro select (https://www.clubdelphi.com/foros/showthread.php?t=52027)

salvica 08-01-2008 08:21:09

Ordenar por una columna resultado de otro select
 
Hola
¿Podeis decirme si se puede ordenar una consulta que tiene una columna que es resultado de otra consulta?

Deseo aplicarlo a la pulsación de una columna en un TListView
Código Delphi [-]
  with ListView_DATOS do begin
       Clear;
       Columns.Clear;
       AddColumnsToListView(ListView_DATOS, 'TIPO',                50 );
       AddColumnsToListView(ListView_DATOS, 'DIRECCIÓN',          200 );
       AddColumnsToListView(ListView_DATOS, 'PLANTA',              60 );
       AddColumnsToListView(ListView_DATOS, 'LETRA',               50 );
       AddColumnsToListView(ListView_DATOS, 'PROPIETARIO',        200 );
       AddColumnsToListView(ListView_DATOS, 'ALQUILADO',           80 );
       AddColumnsToListView(ListView_DATOS, 'ID_CLAVE',           100 );
       AddColumnsToListView(ListView_DATOS, 'ID_PROPIETARIO',     100 );
       AddColumnsToListView(ListView_DATOS, 'ID_INQUILINO',       100 );
  end; { del with ListView_DATOS do }
  with ZQuery_CLIE do begin
       SQL.Clear;
       SQL.Add( 'SELECT propieda.TIPO, propieda.DIRECCION, propieda.NUMERO, propieda.PLANTA, propieda.LETRA,' );
       SQL.Add( '       propieta.NOMBRE, propieta.APELLIDO_1, propieta.APELLIDO_2,' );
     { -------> esta es la columna por la que deseo ordenar }
       SQL.Add( '      (SELECT contrato.ID_PROPIED FROM contrato WHERE contrato.ID_PROPIED=propieda.ID_CLAVE)  AS ALQUILADA' );
     { -------> }
       SQL.Add( '  FROM propieda INNER JOIN (propieta INNER JOIN pertenec ON propieta.ID_CLAVE = pertenec.ID_PROPIET) ON propieda.ID_CLAVE = pertenec.ID_PROPIED' );
       if( Condicion<>'' ) then begin
           SQL.Add( ' ORDER BY '+Condicion+';' );
       end;
       Open;
       ...
       Close;
  end;{ del with ZQuery_CLIE do }


He probado con ORDER BY ALQUILADA DESC y me genera errores

Gracias
Salvica

juanlaplata 08-01-2008 13:11:07

Con solo poner
Código SQL [-]
Order By 3 desc;
si fuera la tercer columna por la que queremos el orden.

salvica 09-01-2008 19:20:08

Gracias juanlaplata, no había caido en ordenar por número de columna:mad:

Voy a abusar un poco más de ti ;), en este caso la subconsulta debe arrojar una cadena o un nulo, pero en otra que debe hacerlo con el número de inmuebles que tiene un propietario (cero o un valor) parece que el ordenamiento no la afecta ¿es normal?
Código Delphi [-]
{ Condicion = '11 DESC' }
  with ZQuery_CLIE do begin
       SQL.Clear;
       SQL.Add( 'SELECT propieta.id_CLAVE,' );
       SQL.Add( '       propieta.NOMBRE, propieta.APELLIDO_1, propieta.APELLIDO_2,' );
       SQL.Add( '       propieta.NIF, propieta.TELEFONO_1,' );
       SQL.Add( '       propieta.DIRECCION, propieta.LOCALIDAD, propieta.PROVINCIA, propieta.C_POSTAL,' );
       SQL.Add( '      (SELECT COUNT(pertenec.ID_PROPIED) FROM pertenec WHERE pertenec.ID_PROPIET=propieta.id_CLAVE)  AS ALQUILER' );
       SQL.Add( '  FROM propieta' );
       if( Condicion<>'' ) then begin
           SQL.Add( ' ORDER BY '+Condicion+';' );
       end;
       Open;
       ..
       Close;
  end;{ del with ZQuery_CLIE do }

Gracias por todo
Salvica

jachguate 10-01-2008 06:26:02

Claro que no es normal. El ordenamiento siempre debe funcionar, dentro de las reglas y convenciones del motor que uses.

Por ejemplo, algunos motores tomarán los nulos como el valor mas bajo, mientras que otros como el valor mas alto.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 09:09:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi