[Lazarus-es] Zeos y SqlQuery no trae datos la consulta pero no tiene errores aparentes

Jose antonio Cuello Principal jcuello en artextrading.com
Vie Jun 26 09:14:43 CEST 2015


Si hace Select x.* from (...) 

te puedes ahorrar ese select y poner directamente el contenido del from puesto que te estás trayendo todos los campos de la subselect, por lo que directamente 

Select Distinct .... 

debe traerte el mismo resultado.

Otra cosa es, "case when R.Practicas = (..) as Ingreso" para traerte el campo R.FECHAPRACTICA, luego haces "where R.Practicas = (...)" por lo que el case siempre se cumple y trae el campo R.FECHAPRACTICA. En este caso sobra el case, directamente traerse el campo R.FECHAPRACTICA.

Este mismo caso se puede aplicar al siguiente case, pudiendo simplificarse en un select first, en vez de un select Min. Será más rápido el first al no tener que procesar todos los registros y ahorrando el Cast de conversión de tipo.

En el segundo subselect, a los campos le faltan los alias de la vista (VW_HISTORIASCLINICAS SE), puede no ser importante, pero en este caso que siempre enlazamos con la misma vista y los campos se repiten podemos evitar problemas de ambigüedad.

Con todo esto me queda la siguiente select, espero sea más sencillo encontrar el problema.


select DISTINCT r.CUENTA, R.NOMBRE, R.OBRASOCIAL, R.NROHC, R.FECHAPRACTICA,
                         
                (Select first 1 E.FECHAPRACTICA
                   from VW_HISTORIASCLINICAS E
                  where E.CUENTA = R.CUENTA 
                    and E.FECHAPRACTICA >= R.FECHAPRACTICA
                    and E.Practicas = 'Egreso de internación'
                  order by E.FECHAPRACTICA ASC) as Egreso,
                                                 
                (Select first 1 (case when SE.CODIGOPRACTICA = 'SEC_CAMA' then SE.DETALLEPRACTICA else null end) as sector 
                   from VW_HISTORIASCLINICAS SE
                  where SE.CUENTA = R.CUENTA
                    and SE.FECHAPRACTICA >= R.FECHAPRACTICA
                    and SE.Practicas = 'Sector' 
                  order by SE.FECHAPRACTICA desc) as Sector
                         
 from VW_HISTORIASCLINICAS R
 
where R.Practicas = 'Recepción internacion'


Un saludo




----- Mensaje original -----
De: "Maxi" <maximiliano.duarte en gmail.com>
Para: "Spanish Version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org>
Enviados: Jueves, 25 de Junio 2015 15:51:57
Asunto: [Lazarus-es] Zeos y SqlQuery no trae datos la consulta pero no	tiene errores aparentes

Firebird 2.1.3
Lazarus 1.4.0 FCP 2.6.4
ZeosLib 7.1.4 estable

Tengo una consulta medio rara por como esta organizado el
almacenamiento (no es mi base aclaro) la consulta funciona en otros
manejadores de datos sin problemas pero en el ide de Lazarus no trae
datos pero no da error en la consulta

Creo que sobreinterpreta o prepara la consulta y algo no le gusta a
estos controles porque no trae datos si los nombres de los campos.
sospecho esto porque en el generador de consultas del componente
sqlquery al hacer el chequeo de sintaxis dice que espera una , en una
linea

No me paso antes con este tipo de consultas.

select x.* from
(select
  DISTINCT
  r.CUENTA,
  R.NOMBRE,
  R.OBRASOCIAL,
  case when R.Practicas = 'Recepción internacion' then R.FECHAPRACTICA
else null end as Ingreso,
  CAST((Select MIN(case when E.Practicas = 'Egreso de internación'
then E.FECHAPRACTICA else null end) as Egreso from
          VW_HISTORIASCLINICAS E
          where E.CUENTA = R.CUENTA and E.FECHAPRACTICA >= R.FECHAPRACTICA
          and E.Practicas = 'Egreso de internación'
          ) as DATE) as Egreso,
  R.NROHC,
    (Select first 1 (case when CODIGOPRACTICA = 'SEC_CAMA' then
DETALLEPRACTICA else null end) as sector from
          VW_HISTORIASCLINICAS SE
          where
          SE.CUENTA = R.CUENTA
          and
          SE.FECHAPRACTICA >= R.FECHAPRACTICA
          and SE.Practicas = 'Sector' order by SE.FECHAPRACTICA desc
          ) as Sector
 from
   VW_HISTORIASCLINICAS R
 where
      R.Practicas = 'Recepción internacion') x
 where x.egreso is null

-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada:
http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml

Linux User #495070
http://domonetic.com/blog

_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

-- 
José Antonio Cuello
Dpto. Informatica
Artex Trading sa
Gold Football sl




More information about the Lazarus-es mailing list