Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_ReGiNhO_

Não consigo remover dados duplicados

Recommended Posts

Boa Tarde!

 

Terminei um SELECT para retornar todos os funcionários da empresa e seus dados. Porém, esta aparecendo dados duplicados.

Sou bem iniciante em sql, mas pesquisei descobri o comando "DISTINCT".

 

Eu usei o DISTINCT, mas mesmo assim continua com arquivos duplicados. Ai descobri o que esta causando isso, o campo(apelido) "Cônjuge" do funcionário. Só um cadastro de cada funcionário que o tem, ou seja, preciso deletar os cadastros que não tem Cônjuge, que são os duplicados.

 

OBS: Dei um SELECT em apenas um campo (DO_FUNCIONARIOS.NOME), e o DISTINCT funcionou certinho. Não apareceu nenhum nome duplicado.

 

Segue o select:

SELECT DISTINCT DO_FUNCIONARIOS.NOME AS 'Nome Funcionário', DO_FUNCIONARIOS.CPFNUMERO AS 'CPF', 
DO_FUNCIONARIOS.PISNUMERO as 'PIS', 
DO_FUNCIONARIOS.CPNUMERO + ' / ' + DO_FUNCIONARIOS.CPSERIE AS 'Cart. Trab com série', 
DO_FUNCIONARIOS.DATANASCIMENTO AS 'Data de Nascimento',TA_MUNICIPIOS.NOME AS 'Cidade Nasci.', 
TA_ESTADOS.NOME AS 'Estado Nasc.', TA_ESTADOSCIVIS.NOME AS 'Estado Civil', 
 CASE DO_FUNCIONARIODEPENDENTES.TIPO
   when 1 then NULL   
   when 2 then NULL
   when 3 then NULL
   when 4 then DO_FUNCIONARIODEPENDENTES.NOME
   when 99 then NULL
end as Cônjuge, DO_FUNCIONARIOS.PAI AS 'PAI', DO_FUNCIONARIOS.MAE AS 'MÃE',
DO_FUNCIONARIOS.SEXO, DO_FUNCIONARIOS.RGNUMERO AS 'RG Número', 
TA_EMISSORESDOCUMENTOS.NOME AS 'RG Emissor', TA_ESTADOS.SIGLA AS 'RG_UF',
DO_FUNCIONARIOS.RGEMISSAODATA AS '"DOC (Data de emissão)',
CS_CARGOS.TITULO AS 'Cargo', DO_FUNCIONARIOS.DATAADMISSAO as 'Data de Admissão', 
DO_FUNCIONARIOENDERECOS.LOGRADOURO AS 'Endereço',
DO_FUNCIONARIOENDERECOS.BAIRRO as 'Bairro',
m.NOME AS 'Cidade',
m2.NOME AS 'Estado',
DO_FUNCIONARIOENDERECOS.CEP, 
DO_FUNCIONARIOTELEFONES.DDD, DO_FUNCIONARIOTELEFONES.TELEFONE, DO_FUNCIONARIOS.EMAIL,
TA_NIVEISESCOLARIDADE.NOME AS 'Escolaridade', 
DO_FUNCIONARIOS.SALARIOATUAL as 'Salário Atual'
FROM DO_FUNCIONARIOS
INNER JOIN 
TA_ESTADOSCIVIS
ON DO_FUNCIONARIOS.ESTADOCIVIL = TA_ESTADOSCIVIS.HANDLE
LEFT JOIN
DO_FUNCIONARIOTELEFONES
ON DO_FUNCIONARIOS.HANDLE = DO_FUNCIONARIOTELEFONES.FUNCIONARIO
INNER JOIN
TA_MUNICIPIOS
ON DO_FUNCIONARIOS.MUNICIPIO = TA_MUNICIPIOS.HANDLE
INNER JOIN
TA_ESTADOS
ON DO_FUNCIONARIOS.ESTADO = TA_ESTADOS.HANDLE
INNER JOIN
CS_CARGOS
ON DO_FUNCIONARIOS.CARGO = CS_CARGOS.HANDLE
INNER JOIN
TA_NIVEISESCOLARIDADE
ON DO_FUNCIONARIOS.NIVELESCOLARIDADE = TA_NIVEISESCOLARIDADE.HANDLE
INNER JOIN
TA_EMISSORESDOCUMENTOS
ON DO_FUNCIONARIOS.RGEMISSOR = TA_EMISSORESDOCUMENTOS.HANDLE
LEFT JOIN
DO_FUNCIONARIOENDERECOS
ON DO_FUNCIONARIOS.HANDLE = DO_FUNCIONARIOENDERECOS.FUNCIONARIO
LEFT JOIN
DO_FUNCIONARIODEPENDENTES
ON DO_FUNCIONARIOS.HANDLE = DO_FUNCIONARIODEPENDENTES.FUNCIONARIO
INNER JOIN (DO_FUNCIONARIOENDERECOS fe INNER JOIN TA_MUNICIPIOS m
ON fe.MUNICIPIO = m.HANDLE)
ON fe.FUNCIONARIO = DO_FUNCIONARIOS.HANDLE
INNER JOIN (DO_FUNCIONARIOENDERECOS fe2 INNER JOIN TA_ESTADOS m2
ON fe2.ESTADO = m2.HANDLE)
ON fe2.FUNCIONARIO = DO_FUNCIONARIOS.HANDLE
ORDER BY DO_FUNCIONARIOS.NOME

 

 

 

O único chato que o "Cônjuge" não tem um nome certo, pois tive que usar um CASE para poder criá-lo do modo que eu queria:

 

CASE DO_FUNCIONARIODEPENDENTES.TIPO
   when 1 then NULL   
   when 2 then NULL
   when 3 then NULL
   when 4 then DO_FUNCIONARIODEPENDENTES.NOME
   when 99 then NULL
end as Cônjuge

 

 

 

 

Alguém sabe como posso fazer para remover os dados duplicados deste select?

 

Obrigado e t++ ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não encontrei o distinct no seu select. E se você usar o GROUP BY em todos os campos? Eles sao realmente identicos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa!

Realmente esqueci de colocar o DISTINCT, mas já corrigi.

 

Desculpe a minha ignorância, mas eu deveria colocar o GROUP BY no final do código?

No caso, assim:


ORDER BY DO_FUNCIONARIOS.NOME
GROUP BY DO_FUNCIONARIOS.NOME

 

?

 

 

 

Acredito que o motivo dos dados duplicados seja o "Cônjuge"

 

CASE DO_FUNCIONARIODEPENDENTES.TIPO
   when 1 then NULL   
   when 2 then NULL
   when 3 then NULL
   when 4 then DO_FUNCIONARIODEPENDENTES.NOME
   when 99 then NULL
end as Cônjuge

 

 

Por ser um alias/apelido, não sei como lidar com ele... :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

_ReGiNhO_

 

sim, seria no final, mas antes do ORDER BY

e seria em TODOS OS CAMPOS, isso inclui seu CASE.

 

No caso, em seu retorno de dados, TODOS OS DADOS SAO IGUAIS? ou no seu caso, a unica coisa que muda de uma linha para outra de um msm funcionario eh o resultado do CASE?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

_ReGiNhO_

 

sim, seria no final, mas antes do ORDER BY

e seria em TODOS OS CAMPOS, isso inclui seu CASE.

 

No caso, em seu retorno de dados, TODOS OS DADOS SAO IGUAIS? ou no seu caso, a unica coisa que muda de uma linha para outra de um msm funcionario eh o resultado do CASE?

 

Abçs

 

 

 

A.Jr ,

 

Somente o Case esta se repetindo. No caso, esta assim:

 

NOME FUNCIONÁRIO | CÔNJUGE

José Vieira | Maria de Lurdes

José Vieira |

José Vieira |

José Vieira |

Ronaldo Batista |

Ronaldo Batista | Ana Maria Braga

Ronaldo Batista |

Ronaldo Batista |

Ronaldo Batista |

 

Apenas um cadastro de cada funcionário esta com o cônjuge, o resta fica com este campo em branco. Apenas o campo Cônjuge.

Compartilhar este post


Link para o post
Compartilhar em outros sites

CASE DO_FUNCIONARIODEPENDENTES.TIPO

when 1 then NULL

when 2 then NULL

when 3 then NULL

when 4 then DO_FUNCIONARIODEPENDENTES.NOME

when 99 then NULL

end as Cônjuge

 

No seu caso, acho que teria que ter um subselect (vão me estrangular por falar isso)

 

Pq?

Pq você deve ter mais de um dependente para este funcionario.

Tira esta tabela do JOIN e faça um subselect com tipo = 4

 

 

"tendeu" ? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu caso, acho que teria que ter um subselect (vão me estrangular por falar isso)

 

Pq?

Pq você deve ter mais de um dependente para este funcionario.

Tira esta tabela do JOIN e faça um subselect com tipo = 4

 

 

"tendeu" ? rs

 

 

Eita! hhe

Certo, vou tentar aqui.

Não sei o que é um subselect. Então vou aprender e tentar.

 

Moderadores, se possível não fechem o tópico. Pois provavelmente irei voltar aqui! hehe

 

Obrigado, A.Jr! Vou tentar aqui! ^^

"gradece!" rs

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A query tem muitos joins , todos foram verificados para ver se não faltaram campos para "fechar" as chaves ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.