Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-12-2013
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Ordenar consulta SQL por campo agregados

Hola, estoy utilizando D2007, ADO y access, en la siguiente consulta SQL quiero:

1º Ordenarla por el campo agregado COSTE1

Si pongo la siguiente instrucción:
Código SQL [-]
fdm.ADOQuery_centros.sql.add('order by gss2_Centros_concertados.c_coste1');
Da error “No se han especificado valores para alguno de los parámetros requeridos”
He probado con
Código SQL [-]
fdm.ADOQuery_centros.sql.add('order by 10');
pero no hace nada


2º Añadirle una instrucción para que muestre solo los registros si el campo agregado NUEVA_PLAZA es distinto de NULL, al ser un campo agregado no sé si se puede hacer.

Código SQL [-]
fdm.ADOQuery_centros.active:=false;
fdm.ADOQuery_centros.sql.clear;
fdm.ADOQuery_centros.sql.add(
Select   gss1_Entidades_gestoras.c_nif                     AS CIF,      
         gss1_Entidades_gestoras.c_denominacion_corta      AS Entidad,  
         gss2_Centros_concertados.f_titular                AS f_titular,
         gss2_Centros_concertados.n_id_centro_concertado   AS Nº,      
         gss2_Centros_concertados.c_sector                 AS Sector,   
         gss2_Centros_concertados.c_denominacion_corta     AS Centro,
         gss2_Centros_concertados.c_municipio              AS Municipio,
         gss2_Centros_concertados.c_provincia              AS Provincia,

      (Select 
        SUM(gss3_conciertos.n_plazas) AS Nuevas_plazas 
        FROM  gss3_conciertos  
        WHERE gss3_conciertos.n_id_centro = gss2_Centros_concertados.n_id_centro_concertado
          and gss3_conciertos.f_firma_concierto > :f_ultima) AS nueva_plaza, 

      (Select '+#13+
        SUM(gss5_preciosxplaza.n_coste_periodo1 * gss4_Plazas_actuales.n_plazas) AS Coste1 
        FROM  gss4_plazas_actuales INNER JOIN gss5_preciosxplaza ON 
        gss5_preciosxplaza.n_codigo_tarifa = gss4_plazas_actuales.n_codigo_tarifa 
        WHERE  gss4_Plazas_actuales.n_id_centro = gss2_Centros_concertados.n_id_centro_concertado) AS coste1 

FROM gss2_Centros_concertados  INNER JOIN    gss1_entidades_gestoras ON 
     gss2_centros_concertados.n_id_entidad = gss1_entidades_gestoras.n_id_entidad );

fdm.ADOQuery_centros.active:=true;
Responder Con Cita
  #2  
Antiguo 10-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Jose Manuel Ver Mensaje
...
Si pongo la siguiente instrucción:
Código SQL [-]
fdm.ADOQuery_centros.sql.add('order by gss2_Centros_concertados.c_coste1');
Da error “No se han especificado valores para alguno de los parámetros requeridos”
...
Hola Jose Manuel.

Hay varias cosas que me llaman la atención en tu código, pero desconozco si será omisión en el copiado...

Primera duda: ¿ Seguro que el nombre del campo está declarado en la tabla como "gss2_Centros_concertados.c_coste1" ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-12-2013 a las 19:02:06.
Responder Con Cita
  #3  
Antiguo 10-12-2013
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
No, en la tabla no hay ningún campo llamado gss2_Centros_concertados.c_coste1, ni en ninguna tabla, ya que se trata de un campo agregado, ese es mi problema. El campo COSTE1 se forma en la consulta. He probado a ordenarlo por el nº de columna (10), pero no funciona cuando el campo es agregado.

Solo consigo ordena la consulta por cualquier de los campos definidos en las tablas.

Código SQL [-]
         gss1_Entidades_gestoras.c_nif                     AS CIF,      
         gss1_Entidades_gestoras.c_denominacion_corta      AS Entidad,  
         gss2_Centros_concertados.f_titular                AS f_titular,
         gss2_Centros_concertados.n_id_centro_concertado   AS Nº,      
         gss2_Centros_concertados.c_sector                 AS Sector,   
         gss2_Centros_concertados.c_denominacion_corta     AS Centro,
         gss2_Centros_concertados.c_municipio              AS Municipio,
         gss2_Centros_concertados.c_provincia              AS Provincia,

Gracias por responderme.
Un saludo.
Responder Con Cita
  #4  
Antiguo 10-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Jose Manuel Ver Mensaje

...
El campo COSTE1 se forma en la consulta
.
Hola Jose Manuel.

Al ver tu código me parece que estas confundiendo los nombres de los campos persistentes del componente, con los declarados en la creación de la tabla o los obtenidos en la consulta SQL.

Por dar un ejemplo, podes armar tu consulta de este modo:
Código Delphi [-]
  ADOQuery.SQL.Text := 'SELECT SUM(CAMPO1) AS TOTAL FROM TU_TABLA';
Y luego obtener el valor deseado de este modo:
Código Delphi [-]
     ShowMessage(ADOQuery.FieldByName('TOTAL').AsString);


Pero no podes enviar en la cadena de la consulta el nombre del campo persistente como en el siguiente ejemplo:
Código Delphi [-]
  ADOQuery.SQL.Text := 'SELECT SUM(DataModule1.DataSet1Campo1) AS TOTAL FROM TU_TABLA';
Esto último es erróneo, la base de datos no esta enterada de que o quién es "DataModule1.DataSet1Campo1".

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 11-12-2013
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Gracias de nuevo por contestarme. Yo tengo las siguientes opciones para ordenar la tabla, y todas me funcionan excepto la numero 7

si pongo
Código Delphi [-]
fdm.ADOQuery_centros.sql.add('order by 10');
no da error, pero no hace nada.
si pongo
Código Delphi [-]
fdm.ADOQuery_centros.sql.add('order by gss4_plazas_actuales.coste1');
error:"No se han especificado valores para algunos de los parámetros requeridos."

No sé, si es posible ordenar por un campo calculado de un SubSelect.

Código SQL [-]
case indice of
  1: fdm.ADOQuery_centros.sql.add('order by gss1_Entidades_gestoras.c_nif');
  2: fdm.ADOQuery_centros.sql.add('order by gss1_Entidades_gestoras.c_denominacion_corta, gss2_Centros_concertados.c_provincia');
  3: fdm.ADOQuery_centros.sql.add('order by gss2_Centros_concertados.c_denominacion_corta');
  4: fdm.ADOQuery_centros.sql.add('order by gss2_Centros_concertados.c_municipio, gss2_centros_concertados.c_denominacion_corta');
  5: fdm.ADOQuery_centros.sql.add('order by gss2_Centros_concertados.c_provincia, gss2_Centros_concertados.c_municipio ');
  6: fdm.ADOQuery_centros.sql.add('order by gss2_Centros_concertados.c_provincia, gss2_Centros_concertados.c_municipio ');
  7: fdm.ADOQuery_centros.sql.add('order by gss4_plazas_actuales.coste1');
end;
Responder Con Cita
  #6  
Antiguo 11-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jose Manuel.

¡ Ahora entiendo el orígen de los nombres largos !, por ejemplo gss1_Entidades_gestoras es el nombre de una tabla ¿ correcto ? Me confundió verlos fuera del ' ' en el mensaje #1 (como si no fueran parte de la cadena SQL).

En tu código SQL tenes declarado el parámetro ":f_ultima" y por el tipo de error que mencionas ,entonces pregunto: ¿ Estas asignándole valor a este antes de ejecutar la consulta ?

Ejemplo:
Código Delphi [-]
  ...
  fdm.ADOQuery_centros.Parameters.ParamByName('f_ultima').Value := ( un valor )
  fdm.ADOQuery_centros.Open;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 15-12-2013
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Duda en ORDER BY campos agregados

Hola, si te fijas en el primer post, decia que todo me funcionaba correctamente en mi consulta. La duda que tenia era saber si se podia ordenar el resultado por un campo agregado, es decir construido en el momento de realizar la consulta, teniendo en cuenta que estoy utilizando D2007, ADO y ACCES.

Un saludo y gracias por todo.
Responder Con Cita
  #8  
Antiguo 15-12-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Buenas noches,
quería comentar un par de cosas.

1.- Si no te funciona así, tal y como lo tienes, prueba a sustituir el order by campo por la propia select que lo construye.

algo así

SELECT bla,bla,bla, select sum(campo) from tabla As Campo1
FROM TABLA2
ORDER BY select sum(campo) from tabla

2.- Supongo que puedes sustituir esos campos calculados por unos inner join de las tablas
gss3_conciertos , gss4_plazas_actuales y gss5_preciosxplaza
Si es posible ( no lo sé, tendría que tener más información y tiempo ) no tendrías ningún problema para hacer lo que estás planteando.

No sé, es cuestión de hacer pruebas.

De todas maneras, tendrías que probar en el propio acces a ver si tragan las consultas. Si traga el access, traga ADO, ya que realmente es el "motor de bbdd" el que te pondría trabas.
También me ha ocurrido que ciertas consultas que en otros motores he podido hacer, en access he tenido que hacer subconsultas, ya que el parser no las soporta. Tampoco es tan problemático.

Prueba y nos cuentas.

Saludos y suerte
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ordenar un campo lookup Ripoll1021 Varios 3 14-08-2020 13:17:17
Ordenar un campo Pacoflaco Tablas planas 4 07-10-2008 21:21:35
Ordenar por un campo calculado IVAND SQL 0 24-11-2004 02:17:28
Ordenar por campo ElCherchu Varios 3 20-10-2004 19:24:51
Ordenar por campo lookup xerkan Firebird e Interbase 5 16-01-2004 09:59:08


La franja horaria es GMT +2. Ahora son las 14:52:06.


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
Copyright 1996-2007 Club Delphi