Estoy un poco atascado en lo siguiente. Los datos de la tabla de la siguiente manera:

  sid   eid  description   returncode    responsemessage   State
    1   T-1                200            OK               Sent 
    1   T-1  Helloworld                                    Processed

No puedo usar el procedimiento almacenado, la aplicación solo admite una consulta SQL.

select * 
from table 
where eid='T-1' 
  and returncode='200' 
  and returnmessage='OK' 
  and state='Sent' 

¿Puede ser necesario agregar algo aquí?

¿Algún consejo o idea sobre cómo puedo lograr esto con la consulta SQL?

Actualización: Base de datos Oracle, quiero recuperar "HelloWorld" de la columna de descripción, pero solo debería recuperarse cuando State = Sent tiene returncode = 200 y responsemessage = ok

0
user3384231 21 feb. 2018 a las 14:56

2 respuestas

La mejor respuesta

No tengo del todo claro lo que está tratando de lograr, pero tal vez se refería a algo como esto:

select T1.* 
from table  T1
INNER JOIN table T2
        ON  T2.SID = T1.sid
where T1.eid='T-1' 
  and T1.returncode='200' 
  and T1.returnmessage='OK' 
  and T1.state='SENT'
  AND T2.description IS NOT NULL
1
HoneyBadger 21 feb. 2018 a las 12:01

Creo que puedes hacer esto usando exists:

select t.*
from t
where t.description is not null and t.eid = 'T-1' and
      exists (select 1
              from t t2
              where t2.eid = t.eid and t2.returncode = '200' and
                    t2.returnmessage = 'OK' and t2.state = 'SENT' 
             );

Es posible que también desee incluir la igualdad en sid, pero eso no está claro a partir de la pregunta.

0
Gordon Linoff 21 feb. 2018 a las 11:59