Fórum Selecinar tudo que for igual, sem parametros mas tem que ser #60235

21/10/2008

0

iae gente.

Tigrada, to sofrendo o atentado pra faze uma consulta em sql, aqui em uma tabela. seguinte, eu tenho uma tabela detalhe que tem as Colunas ID_EXAME,ID_HONO,TP.

os dados ficam assim nela:
ID_EXAME,ID_HONO,TP
    1               1         P
    1               2        AUX
    2               7        P
    6               1        P
    6               2        AUX

o que eu preciso é selecionar tudo que ID_HONO = 1 como principal e ID_HONO = 2 como Auxiliar... só que o ID_EXAME entre esses 2 tem que ser igual.

Não tenho a minima idéia de como montar o SQL, já tentei várias maneiras e nenhuma deu certo segue um dos scripts que tentei:
SELECT E.ID_EXAME, E.DATA_EXAME,E.ID_CONVENIO,
E.DT_PGTO_HONO, E.ID_PACIENTE,HE.*
FROM HONO_EXAME HE, EXAME E
WHERE
 (
  (HE.ID_EXAME  = E.ID_EXAME)AND
  (HE.ID_HONO  = 1) AND (HE.TP = ´P´) AND
  (E.DT_PGTO_HONO >=´2008-01-01´)AND
  (E.DT_PGTO_HONO <=´2009-01-01´)
  )
  UNION
  SELECT E.ID_EXAME, E.DATA_EXAME,E.ID_CONVENIO,
E.DT_PGTO_HONO, E.ID_PACIENTE,HE.*
FROM HONO_EXAME HE, EXAME E
WHERE
 (
  (HE.ID_EXAME  = E.ID_EXAME)AND
  (HE.ID_HONO  = 7) AND (HE.TP <> ´P´) AND
  (E.DT_PGTO_HONO >=´2008-01-01´)AND
  (E.DT_PGTO_HONO <=´2009-01-01´)
  )


Qualquer ajuda é bem aceita, agradeço desde já a juda!
vlw ^.^


Daniel Martins

Daniel Martins

Responder

Posts

21/10/2008

Emerson Nascimento

baseado nos registros exibidos, qual seria o retorno?


Responder

Gostei + 0

22/10/2008

Daniel Martins

no caso citado seriam os registros
ID_EXAME,ID_HONO,TP 
    1               1         P 
    1               2        AUX 
    6               1        P 
    6               2        AUX 
Excluso
    2               7        P 




Responder

Gostei + 0

22/10/2008

Emerson Nascimento

tente assim:
SELECT
  E.ID_EXAME, E.DATA_EXAME, E.ID_CONVENIO,
  E.DT_PGTO_HONO, E.ID_PACIENTE, HE.*
FROM
  HONO_EXAME HE
INNER JOIN
  HONO_EXAME HE2 ON (HE2.ID_EXAME = HE2.ID_EXAME
    AND HE2.ID_HONO <> HE.ID_HONO)
INNER JOIN
  EXAME E ON (E.ID_EXAME  = HE.ID_EXAME)
WHERE
  HE.ID_HONO IN (1, 2)
  AND (E.DT_PGTO_HONO >=´2008-01-01´) AND
    (E.DT_PGTO_HONO <=´2009-01-01´))



Responder

Gostei + 0

22/10/2008

Daniel Martins

Oi. testei o sql sugerido... mas estranhamente ele repetiu várias vezes os mesmos registros
Ex.:
ID_EXAME,ID_HONO,TP 
    1               1         P 
    1               1         P 
    1               1         P 
    1               1         P 
...

Sinistro Oo

Tipo se ele deveria retornar 4 registros diferentes ele Me retornou 4 registros iguais.


Responder

Gostei + 0

23/10/2008

Daniel Martins

talves a solução seja mudar a tabela mesmo.. né... tipo criar 2 colunas uma para armazenar o P e outro para armazenar o AUX...
sei llá


Responder

Gostei + 0

23/10/2008

Emerson Nascimento

algo assim não serve?
SELECT
  E.ID_EXAME, E.DATA_EXAME, E.ID_CONVENIO,
  E.DT_PGTO_HONO, E.ID_PACIENTE, HE1.*, HE2.*
FROM
  EXAME E
LEFT JOIN
  HONO_EXAME HE1 ON (HE1.ID_EXAME = E.ID_EXAME AND HE1.ID_HONO = 1)
LEFT JOIN
  HONO_EXAME HE2 ON (HE2.ID_EXAME = E.ID_EXAME AND HE2.ID_HONO = 2)
WHERE
  (COALESCE(HE1.ID_HONO,0) = 1) AND
  (COALESCE(HE2.ID_HONO,0) = 2) AND 
  (E.DT_PGTO_HONO >=´2008-01-01´) AND (E.DT_PGTO_HONO <=´2009-01-01´)



Responder

Gostei + 0

31/10/2008

Daniel Martins

Oi,
resolvi o problema usando 2 queryes diferentes, e um bocado de algoritimo no delphi.

Agradeço as dicas
Obrigado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar