Ir para conteúdo

SQL composta (RESOLVIDO)


Ir para a solução Resolvido por omar,

Posts Recomendados


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

Estou criando uma SQL para criar um relatório de atualização cadastral, porém são várias tabelas a ser vinculadas.

Quando eu salvo da erro em alguma linha após o FROM, acredito que seja nos JOINs.

Alguém poderia ver se fiz as ligações corretas?

Fico no aguardo.

SELECT          PFUNC.NOME AS NOME_FUNC,
                PFUNC.DATAADMISSAO, 
                PFUNC.CHAPA,
                PFUNC.PISPASEP,
                PFUNC.DTCADASTROPIS,
                PFUNCAO.NOME AS NOME_FUNCAO,
                PPESSOA.CARTEIRATRAB,
                PPESSOA.SERIECARTTRAB,
                PPESSOA.CPF,
                PPESSOA.RUA AS END_FUNC,
                PPESSOA.NUMERO AS NUM_FUNC,
                PPESSOA.BAIRRO AS BAIRRO_FUNC,
                PPESSOA.CIDADE AS CID_FUNC,
                PPESSOA.CEP AS CEP_FUNC,
                PPESSOA.ESTADO AS ESTADO_FUNC,
                PPESSOA.CARTIDENTIDADE,
                PPESSOA.DTCARTTRAB,
                PPESSOA.UFCARTTRAB,
                PPESSOA.CERTIFRESERV,
                PPESSOA.CATEGMILITAR,
                PPESSOA.TITULOELEITOR,
                PPESSOA.ZONATITELEITOR,
                PPESSOA.SECAOTITELEITOR,
                PPESSOA.ORGEMISSORIDENT,
                PPESSOA.UFCARTIDENT,
                PPESSOA.CARTMOTORISTA,
                PPESSOA.TIPOCARTHABILIT,
                PPESSOA.DTEMISSAOIDENT,
                PPESSOA.ESTADOCIVIL,
                PPESSOA.SEXO,
                PPESSOA.GRAUINSTRUCAO,
                PPESSOA.NATURALIDADE,
                GFILIAL.NOME AS NOME_FILIAL,
                GFILIAL.CGC,
                PCODNACAO.DESCRICAO,
                PCODINTRUCAO.DESCRICAO,
                PCODESTCIVIL,
                PFDEPEND.GRAUPARENTESCO
                            
FROM PFUNC (NOLOCK)
JOIN PFUNCAO  ON PFUNCAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFUNCAO.CODIGO = PFUNC.CODFUNCAO
JOIN PPESSOA  ON PPESSOA.CODIGO = PFUNC.CODPESSOA
JOIN GFILIAL  ON GFILIAL.CODCOLIGADA = PFUNC.CODCOLIGADA AND GFILIAL.CODFILIAL = PFUNC.CODFILIAL
JOIN PCODNACAO.CODCLIENTE = PPESSOA.CODIGO AND PCODNACAO.DESCRICAO = PPESSOA.NACIONALIDADE
JOIN PCODINSTRUCAO.CODCLIENTE = PPESSOA.CODIGO AND PCODINSTRUCAO.DESCRICAO = PPESSOA.GRAUINSTRUCAO
JOIN PCODESTCIVIL.CODCLIENTE = PPESSOA.CODIGO AND PCODESTCIVIL.DESCRICAO = PPESSOA.ESTADOCIVIL
JOIN PFDEPEND.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFDEPEND.GRAUPARENTESCO = PFUNC.GRAUPARENTESCO

WHERE  PFUNC.CODSITUACAO <> 'D'
AND  PFUNC.CODCOLIGADA =:CODCOLIGADA
AND  PFUNC.CODFILIAL =:CODFILIAL
AND  PFUNC.CHAPA =:CHAPA
AND  PFDEPEND.GRAUPARENTESCO = '6'
AND  PFDEPEND.GRAUPARENTESCO = '7'

GROUP BY PFUNCAO, PPESSOA, GFILIAL, PFUNC, PCODNACAO, PCODINSTRUCAO, PCODESTCIVIL, PFDEPEN
ORDER BY PFUNC.NOME

 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

Tá errado a partir daqui:

JOIN PCODNACAO.CODCLIENTE = PPESSOA.CODIGO AND PCODNACAO.DESCRICAO = PPESSOA.NACIONALIDADE
JOIN PCODINSTRUCAO.CODCLIENTE = PPESSOA.CODIGO AND PCODINSTRUCAO.DESCRICAO = PPESSOA.GRAUINSTRUCAO
JOIN PCODESTCIVIL.CODCLIENTE = PPESSOA.CODIGO AND PCODESTCIVIL.DESCRICAO = PPESSOA.ESTADOCIVIL
JOIN PFDEPEND.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFDEPEND.GRAUPARENTESCO = PFUNC.GRAUPARENTESCO

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

depois do JOIN nome da tabela

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

Eu coloquei o nome da tabela conforme vc orientou e deu esse erro:

FROM PFUNC (NOLOCK)
JOIN PFUNCAO  ON PFUNCAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFUNCAO.CODIGO = PFUNC.CODFUNCAO
JOIN PPESSOA  ON PPESSOA.CODIGO = PFUNC.CODPESSOA
JOIN GFILIAL  ON GFILIAL.CODCOLIGADA = PFUNC.CODCOLIGADA AND GFILIAL.CODFILIAL = PFUNC.CODFILIAL
JOIN PCODNACAO ON PCODNACAO.CODCLIENTE = PPESSOA.CODIGO AND PCODNACAO.DESCRICAO = PPESSOA.NACIONALIDADE
JOIN PCODINSTRUCAO ON PCODINSTRUCAO.CODCLIENTE = PPESSOA.CODIGO AND PCODINSTRUCAO.DESCRICAO = PPESSOA.GRAUINSTRUCAO
JOIN PCODESTCIVIL ON PCODESTCIVIL.CODCLIENTE = PPESSOA.CODIGO AND PCODESTCIVIL.DESCRICAO = PPESSOA.ESTADOCIVIL
JOIN PFDEPEND ON PFDEPEND.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFDEPEND.GRAUPARENTESCO = PFUNC.GRAUPARENTESCO

 

image.png.86dea1065672a2fe74bca9c5a954a167.png

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

Bom dia.  

 

1o. Não existe esta coluna PFDEPEND.GRAUPARENTESCO

2o.  PCODESTCIVIL.DESCRICAO = PPESSOA.ESTADOCIVIL = um é codigo o outro é descrição

3o. PCODINSTRUCAO.DESCRICAO = PPESSOA.GRAUINSTRUCAO = um é codigo o outro é descrição

E por ai vai.

Vc tem de fazer relacionamentos onde os campos são a mesma coisa nas duas tabelas e a fonte do relacionamento entre elas.

 

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

Ver na mensagem abaixo !

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

ACERTADO !!!!
FROM   PFUNC (NOLOCK)
   INNER JOIN PPESSOA (NOLOCK)
        ON PFUNC.CODPESSOA = PPESSOA.CODIGO
   INNER JOIN PFUNCAO (NOLOCK)
        ON PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA
            AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
   LEFT JOIN GFILIAL (NOLOCK)
        ON PFUNC.CODFILIAL = GFILIAL.CODFILIAL
        AND PFUNC.CODCOLIGADA = GFILIAL.CODCOLIGADA
   LEFT JOIN PFDEPEND (NOLOCK)
        ON PFUNC.CODCOLIGADA = PFDEPEND.CODCOLIGADA AND PFUNC.CHAPA = PFDEPEND.CHAPA
   LEFT JOIN PCODNACAO (NOLOCK)
        ON PPESSOA.NACIONALIDADE =  PCODNACAO.CODCLIENTE
   LEFT JOIN PCODINSTRUCAO (NOLOCK)
        ON PPESSOA.GRAUINSTRUCAO = PCODINSTRUCAO.CODCLIENTE
   LEFT JOIN PCODESTCIVIL (NOLOCK)
        ON PPESSOA.ESTADOCIVIL = PCODESTCIVIL.CODCLIENTE

 

ANTES DO FROM TAMBÉM TEM ERRO NOS CAMPOS DO SELECT.

TIPO            PCODESTCIVIL,   ????

Editado por omar
Link para comentar
Compartilhar em outros sites


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

Olá Gabriela,

Não sei se você já trabalha assim. Lendo seu post e vendo o print que enviou me parece que você está aplicando direto no Reports a consulta SQL que deseja retornar os dados.

Se for isso minha sugestão é testar antes a consulta diretamente em um cliente de acesso ao seu SGBD. Nele você conseguirá ver de imediato erros na consulta e checar as duplicidades de registro. Vai te ajudar muito.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

Olá Giuliano!!

Não estou direto no Reports, eu faço o teste na própria SQL antes de vincular ao relatório.

Mas obrigada pela dica.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

1 hora atrás, omar disse:

ACERTADO !!!!
FROM   PFUNC (NOLOCK)
   INNER JOIN PPESSOA (NOLOCK)
        ON PFUNC.CODPESSOA = PPESSOA.CODIGO
   INNER JOIN PFUNCAO (NOLOCK)
        ON PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA
            AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
   LEFT JOIN GFILIAL (NOLOCK)
        ON PFUNC.CODFILIAL = GFILIAL.CODFILIAL
        AND PFUNC.CODCOLIGADA = GFILIAL.CODCOLIGADA
   LEFT JOIN PFDEPEND (NOLOCK)
        ON PFUNC.CODCOLIGADA = PFDEPEND.CODCOLIGADA AND PFUNC.CHAPA = PFDEPEND.CHAPA
   LEFT JOIN PCODNACAO (NOLOCK)
        ON PPESSOA.NACIONALIDADE =  PCODNACAO.CODCLIENTE
   LEFT JOIN PCODINSTRUCAO (NOLOCK)
        ON PPESSOA.GRAUINSTRUCAO = PCODINSTRUCAO.CODCLIENTE
   LEFT JOIN PCODESTCIVIL (NOLOCK)
        ON PPESSOA.ESTADOCIVIL = PCODESTCIVIL.CODCLIENTE

 

ANTES DO FROM TAMBÉM TEM ERRO NOS CAMPOS DO SELECT.

TIPO            PCODESTCIVIL,   ????

Eu coloquei desta forma e a SQL não apresentou erro.

Porém não busca os dados, quando eu executo a SQL ela fica em branco.

Eu estou tendo dificuldade de fazer essa SQL porque alguns dados eu preciso da descrição, como Estado Civil, Nacionalidade, Grau de Instrução, e na tabela PFUNC esses dados estão com código.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

AND  (PFDEPEND.GRAUPARENTESCO = '6'
OR  PFDEPEND.GRAUPARENTESCO = '7')

Vc tinha colocado and.  Como o dependente não pode ser 6 e 7 ao mesmo tempo não vem nada.

Também: Devido este campo no select   PFDEPEND.GRAUPARENTESCO, em alguns casos onde existem vários dependentes do tipo 6 ou 7, vai duplicar os resultados.

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

Entendi.. Deu certo a execução da SQL, puxou os dados certinho.

Só me tira uma dúvida, no relatório eu preciso que ele puxe o nome da mãe e do pai, quando eu coloco o campo que informei no SELECT ele puxa o nome do primeiro dependente que seria o pai (por ser código 6), não tem como eu colocar dentro do SELECT que eu quero que ele busca o nome do dependente se o grau de parentesco por 6 por exemplo?

Tipo algo assim: PFDEPEND.NOME (SE PFDEPEND.GRAUPARENTESCO ='6') AS NOME_PAI (não sei se tem como colocar a função SE dentro da SQL, você entendeu o que quero dizer?

Preciso encontrar uma forma de especificar que aquele campo é para ele puxar o nome do pai e no outro o da mãe.

image.png.e2619f208cbf57fe88639b6766944948.png

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

Eu consegui criar a SQL com a condição dentro do SELECT: 

IIF (PFDEPEND.GRAUPARENTESCO='6',PFDEPEND.NOME,'') AS NOME_PAI,
IIF (PFDEPEND.GRAUPARENTESCO='7',PFDEPEND.NOME,'') AS NOME_MAE

Deu certo, mas ele puxa duas linhas, uma com o nome da mãe e outra com o nome do pai, será que não dá para colocar tudo na mesma linha?

Porque dessa forma, dentro do relatório ele só puxa um, não puxa os dois nomes.

image.png.df2b69747c17507112b53935f339717e.png

 

Link para comentar
Compartilhar em outros sites

  • Solução

  • Tópicos Que Criei:  59
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  817
  • Conteúdo/Dia:  0.16
  • Reputação:   105
  • Pontos/Conquistas:  4.774
  • Conteúdo Resolvido:  0
  • Dias Ganho:  74
  • Status:  Offline
  • Idade:  61
  • Dispositivo:  Windows

Eu tenho um select que puxa nome do pai e mae numa unica linha:
      SELECT PFUNC.CODCOLIGADA,
       PFUNC.CHAPA,
       PPESSOA.NOME,
       PPESSOA.DTNASCIMENTO,
       PFUNCAO.NOME AS FUNCAO,
       PPESSOA.CPF,
       PPESSOA. CARTIDENTIDADE,
       DEP1.NOME    AS PAI,
       DEP2.NOME    AS MAE,
       PFUNC.CODSITUACAO
FROM   PPESSOA (NOLOCK)
       INNER JOIN PFUNC (NOLOCK)
         ON PPESSOA.CODIGO = PFUNC.CODPESSOA
       INNER JOIN PFUNCAO (NOLOCK)
         ON PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA
            AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
       LEFT JOIN PFDEPEND AS DEP1(NOLOCK)
         ON ( PFUNC.CODCOLIGADA = DEP1.CODCOLIGADA
              AND PFUNC.CHAPA = DEP1.CHAPA )
            AND DEP1.GRAUPARENTESCO = '6'
       LEFT JOIN PFDEPEND AS DEP2(NOLOCK)
         ON ( PFUNC.CODCOLIGADA = DEP2.CODCOLIGADA
              AND PFUNC.CHAPA = DEP2.CHAPA )
            AND DEP2.GRAUPARENTESCO = '7'
WHERE  PFUNC.CODSITUACAO <> 'D'
ORDER  BY PFUNC.NOME 
 

Editado por omar
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  39
  • Conteúdo/Dia:  0.02
  • Reputação:   2
  • Pontos/Conquistas:  332
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  35

Deu certo Omar!! Muito obrigada, ficou perfeita a SQL.

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.