Ir para conteúdo
Anúncios Publicitários
Entre para seguir isso  
Gabriela Borin

SQL composta (RESOLVIDO)

Recommended Posts

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

depois do JOIN nome da tabela

Editado por omar

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ver na mensagem abaixo !

Editado por omar

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×

Important Information

Usando este site, você concorda com nossos Termos de Uso.