Ir para conteúdo
AVISO AOS MEMBROS:

Fizemos uma atualização em 18/06/2023, e a forma de acesso ao Fórum mudou. Não mais está sendo aceito o login pelo Nome de Exibição cadastrado. Agora, apenas pelo email e pelos integradores de Login do Facebook, Google e Microsoft. O Facebook estava com uma validação pendente e já foi normalizado o acesso, já o Google, ainda estamos verificando o que está ocorrendo que não está funcionando.
Caso precisem de ajuda para o login pelo email acesse o link << Esqueci minha senha de acesso>> ou nos envie um pedido de ajuda pelo email admin@forumrm.com.br

Administração
ForumRM

SQL dados ass. medica


Ketsia

Posts Recomendados


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  11
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  120
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  34
  • Dispositivo:  Windows

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 
 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  8
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  22
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  194
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

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.

Editado por jeanqueres
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.801
  • Conteúdo/Dia:  1.34
  • Reputação:   289
  • Pontos/Conquistas:  106.261
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Online
  • Idade:  51
  • Dispositivo:  Windows

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.

 

 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  11
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  120
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  34
  • Dispositivo:  Windows

Obrigada Gente. 

 

Deu certo!!!

 

Link para comentar
Compartilhar em outros sites

  • 1 ano depois...

  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  10
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  78
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  60
  • Dispositivo:  Windows

Nao reconheceu a variável

TRUNC(TO_CHAR(SYSDATE - PPESSOA.DTNASCIMENTO) / 365.25),

Link para comentar
Compartilhar em outros sites

  • 1 mês depois...

  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.801
  • Conteúdo/Dia:  1.34
  • Reputação:   289
  • Pontos/Conquistas:  106.261
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Online
  • Idade:  51
  • Dispositivo:  Windows

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, no SQLServer é o Getdate()

Link para comentar
Compartilhar em outros sites

  • 3 anos depois...

  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  4
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  31
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Dispositivo:  Windows

Copiei para fazer teste e apresenta erro de SQL não encerrado adequadamente, o que pode ter de errado? 

 

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 

image.png.bd09f408f260e2557526c2b6ba8e3e04.png

 

Link para comentar
Compartilhar em outros sites

  • 1 mês depois...

  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.801
  • Conteúdo/Dia:  1.34
  • Reputação:   289
  • Pontos/Conquistas:  106.261
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Online
  • Idade:  51
  • Dispositivo:  Windows

Não tenho Oracle aqui instalado, mas no seu caso, o ideal é rodar no Gerenciador do Oracle primeiro, para validar sua sentença, e então, tentar gravar ela no RM. 

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

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

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.