Jump to content
Ketsia

SQL dados ass. medica

Recommended Posts

Pessoal, boa tarde!

Criei uma consulta sql para me trazer todos os funcionários e dependentes que tem plano de saúde, porém, ela só me traz os funcionários que tem dependentes no plano, ou outros que não tem ele não traz.

Alguém pode me ajudar? abaixo a conulta:

 

SELECT GFILIAL.CODCOLIGADA,
       GFILIAL.CODFILIAL,
       GFILIAL.NOMEFANTASIA,
       PFUNC.CHAPA,
       PFUNC.NOME,
       PFUNC.CODSITUACAO,
       PPESSOA.DTNASCIMENTO,
       PPESSOA.SEXO,
       TRUNC(TO_CHAR(SYSDATE - PPESSOA.DTNASCIMENTO) / 365.25),
       PFDEPEND.NOME,
       PFDEPEND.GRAUPARENTESCO,
       DECODE(PFDEPEND.GRAUPARENTESCO, '1', 'FILHO',
                                       '5', 'CONJUGE',
                                       'C', 'COMPANHEIRO',
                                       '9', 'OUTROS',
                                       '6', 'PAI',
                                       '7', 'MAE'),
       PFDEPEND.DTNASCIMENTO,
       PFDEPEND.SEXO,
       TRUNC(TO_CHAR(SYSDATE - PFDEPEND.DTNASCIMENTO) / 365.25),
       PFCOMPL.ASSMEDICA,
       GCONSIST.DESCRICAO
FROM   GFILIAL,
       PFUNC,
       PPESSOA,
       PFDEPENDCOMPL,
       PFCOMPL,
       PFDEPEND,
       GCONSIST
WHERE  GFILIAL.CODCOLIGADA = PFUNC.CODCOLIGADA
       AND GFILIAL.CODFILIAL = PFUNC.CODFILIAL
       AND PFUNC.CODPESSOA = PPESSOA.CODIGO
       AND PFUNC.CODCOLIGADA = PFDEPENDCOMPL.CODCOLIGADA
       AND PFUNC.CHAPA = PFDEPENDCOMPL.CHAPA
       AND PFDEPEND.NRODEPEND = PFDEPENDCOMPL.NRODEPEND
       AND PFUNC.CODCOLIGADA = PFCOMPL.CODCOLIGADA
       AND PFUNC.CHAPA = PFCOMPL.CHAPA
       AND PFUNC.CODCOLIGADA = PFDEPEND.CODCOLIGADA
       AND PFUNC.CHAPA = PFDEPEND.CHAPA
       AND PFDEPENDCOMPL.ASSMEDICA IS NOT NULL
       AND GCONSIST.CODCLIENTE = PFCOMPL.ASSMEDICA
       AND GCONSIST.CODTABELA = 'ASSMED'
ORDER  BY GFILIAL.CODCOLIGADA,
          GFILIAL.CODFILIAL,
          PFUNC.CHAPA 
 

Share this post


Link to post
Share on other sites

Bom dia Ketsia!

Da forma que está fazendo (usando produto cartesiano) e inserindo a linha  "AND PFUNC.CHAPA = PFDEPENDCOMPL.CHAPA" você obriga sua consulta a sempre buscar funcionários com dependentes, excluindo os que não possuem. Não sei se entendi 100% como seu SQL está funcionando, mas talvez algo do tipo funcione:

SELECT GFILIAL.CODCOLIGADA,
       GFILIAL.CODFILIAL,
       GFILIAL.NOMEFANTASIA,
       PFUNC.CHAPA,
       PFUNC.NOME,
       PFUNC.CODSITUACAO,
       PPESSOA.DTNASCIMENTO,
       PPESSOA.SEXO,
       TRUNC(TO_CHAR(SYSDATE - PPESSOA.DTNASCIMENTO) / 365.25),
       PFDEPEND.NOME,
       PFDEPEND.GRAUPARENTESCO,
       DECODE(PFDEPEND.GRAUPARENTESCO, '1', 'FILHO',
                                       '5', 'CONJUGE',
                                       'C', 'COMPANHEIRO',
                                       '9', 'OUTROS',
                                       '6', 'PAI',
                                       '7', 'MAE'),
       PFDEPEND.DTNASCIMENTO,
       PFDEPEND.SEXO,
       TRUNC(TO_CHAR(SYSDATE - PFDEPEND.DTNASCIMENTO) / 365.25),
       PFCOMPL.ASSMEDICA,
       GCONSIST.DESCRICAO
       
FROM	GFILIAL 
		JOIN PFUNC ON PFUNC.CODCOLIGADA = GFILIAL.CODCOLIGADA AND PFUNC.CODFILIAL = GFILIAL.CODFILIAL
		JOIN PPESSOA ON PPESSOA.CODIGO = PFUNC.CODPESSOA
		LEFT JOIN PFDEPEND 
			JOIN PFDEPENDCOMPL ON PFDEPENDCOMPL.CODCOLIGADA = PFDEPEND.CODCOLIGADA 
				AND PFDEPENDCOMPL.CHAPA = PFDEPEND.CHAPA AND PFDEPENDCOMPL.NRODEPEND = PFDEPEND.NRODEPEND AND PFDEPENDCOMPL.ASSMEDICA IS NOT NULL
		ON PFDEPEND.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFDEPEND.CHAPA = PFUNC.CHAPA
		JOIN PFCOMPL ON PFCOMPL.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFCOMPL.CHAPA = PFUNC.CHAPA
		JOIN GCONSIST ON GCONSIST.CODCLIENTE = PFCOMPL.ASSMEDICA
       		
WHERE  GCONSIST.CODTABELA = 'ASSMED'
ORDER  BY GFILIAL.CODCOLIGADA,
          GFILIAL.CODFILIAL,
          PFUNC.CHAPA 

O que imaginei que poderia ajudar é colocar um Left Join dos funcionários com os dependentes, a condição no join eliminaria os dependentes que não possuem plano de saúde, ao mesmo tempo que o left te ajudaria a manter a tabela de funcionários. Para filtrar os funcionários sem plano, você acrescentaria a condição no seu WHERE (eu assumi que a condição que está usando para isso é a GCONSIST.CODTABELA = 'ASSMED').
Bom, acredito que esse é o caminho que eu tentaria.

Abraço.

Edited by jeanqueres

Share this post


Link to post
Share on other sites

Ketsia,

bom dia.

Use os joins para fazer a relação entre suas tabelas, e com o LEFT JOIN você consegue que venham os registros da sua tabela de Funcionário mesmo que não tenham dependentes por exemplo como deseja.

Veja como ficaria:

SELECT GFILIAL.CODCOLIGADA,
       GFILIAL.CODFILIAL,
       GFILIAL.NOMEFANTASIA,
       PFUNC.CHAPA,
       PFUNC.NOME,
       PFUNC.CODSITUACAO,
       PPESSOA.DTNASCIMENTO,
       PPESSOA.SEXO,
       TRUNC(TO_CHAR(SYSDATE - PPESSOA.DTNASCIMENTO) / 365.25),
       PFDEPEND.NOME,
       PFDEPEND.GRAUPARENTESCO,
       DECODE(PFDEPEND.GRAUPARENTESCO, '1', 'FILHO',
                                       '5', 'CONJUGE',
                                       'C', 'COMPANHEIRO',
                                       '9', 'OUTROS',
                                       '6', 'PAI',
                                       '7', 'MAE'),
       PFDEPEND.DTNASCIMENTO,
       PFDEPEND.SEXO,
       TRUNC(TO_CHAR(SYSDATE - PFDEPEND.DTNASCIMENTO) / 365.25),
       PFCOMPL.ASSMEDICA,
       GCONSIST.DESCRICAO
FROM   GFILIAL,
       join PFUNC on GFILIAL.CODCOLIGADA = PFUNC.CODCOLIGADA AND GFILIAL.CODFILIAL = PFUNC.CODFILIAL
       join PPESSOA on PFUNC.CODPESSOA = PPESSOA.CODIGO
       left join PFDEPEND  on PFUNC.CODCOLIGADA = PFDEPEND.CODCOLIGADA AND PFUNC.CHAPA = PFDEPEND.CHAPA

       left join PFDEPENDCOMPL on PFUNC.CODCOLIGADA = PFDEPENDCOMPL.CODCOLIGADA AND PFUNC.CHAPA = PFDEPENDCOMPL.CHAPA
                    AND PFDEPEND.NRODEPEND = PFDEPENDCOMPL.NRODEPEND
       left join PFCOMPL on PFUNC.CODCOLIGADA = PFCOMPL.CODCOLIGADA AND PFUNC.CHAPA = PFCOMPL.CHAPA
       left join GCONSIST on GCONSIST.CODCLIENTE = PFCOMPL.ASSMEDICA

WHERE  
       PFDEPENDCOMPL.ASSMEDICA IS NOT NULL AND GCONSIST.CODTABELA = 'ASSMED'
ORDER  BY GFILIAL.CODCOLIGADA,
          GFILIAL.CODFILIAL,
          PFUNC.CHAPA 

 

Neste caso, deixando no WHERE apenas as condições de filtros mesmo... todas as relações entre as tabelas, você passa para os JOINS.

 

 

Share this post


Link to post
Share on other sites

TO_CHAR é uma função interna do Oracle... se sua base é SQL Server terá que ajustar essa e outras partes. O sysdate também, por exemplo, o SQL é o Getdate()

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.