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

Ismael L. Donis Garcia slibre en citricos.co.cu
Vie Jun 26 14:52:44 CEST 2015


Concuerdo con José Antonio que el primer case sobra ya que la consulta la 
filtras con un where E.Practicas = 'Egreso de internación'
Por tal motivo los datos siempre cumpliran esa condición

Otra cosa Maxi que no concuerdo contigo es que los JOIN devuelvan valores 
erroneos, más bien pienso que es que no hemos planteado bien la consulta y 
por eso obtenemos datos no esperados.

Ya José te dio una consulta. Ahora prueba la siguiente y dime resultados.

select x.* from
(select DISTINCT R.CUENTA, R.NOMBRE, R.OBRASOCIAL, R.FECHAPRACTICA AS 
INGRESO, E.EGRESO, R.NROHC, S.SECTOR FROM
(Select EG.CUENTA, EG.FECHAPRACTICA, MIN(EG.PRACTICAS) as EGRESO
from VW_HISTORIASCLINICAS EG
where EG.Practicas = 'Egreso de internación'
group by EG.CUENTA, EG.FECHAPRACTICA) E INNER JOIN (VW_HISTORIASCLINICAS R 
INNER JOIN
(Select first 1 SE.CUENTA, SE.FECHAPRACTICA, (case when SE.CODIGOPRACTICA = 
'SEC_CAMA' then SE.DETALLEPRACTICA else null end) as SECTOR
       from VW_HISTORIASCLINICAS SE where SE.Practicas = 'Sector'
       order by SE.FECHAPRACTICA desc) S ON R.CUENTA = S.CUENTA and 
R.FECHAPRACTICA <= S.FECHAPRACTICA) ON E.CUENTA = R.CUENTA and 
E.FECHAPRACTICA >= R.FECHAPRACTICA) x
where x.egreso is null

Pruebala con el select externo y sin el.

Saludos Reiterados
========
| ISMAEL |
========
Only for the small landowners and Cubans companies
Website: www.sisconge.byethost15.com
              www.sisconge.hol.es
----- Original Message ----- 
From: "Jose antonio Cuello Principal" <jcuello en artextrading.com>
To: "Spanish version of Lazarus List" 
<lazarus-es en lists.lazarus.freepascal.org>
Sent: Friday, June 26, 2015 3:14 AM
Subject: Re: [Lazarus-es] Zeos y SqlQuery no trae datos la consulta perono 
tiene errores aparentes


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

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






More information about the Lazarus-es mailing list