DiegoVix Postado Março 5, 2010 Denunciar Share Postado Março 5, 2010 Bom Tarde!!!estou precisando selecionar os servidores que estao ativos, que tem mais de um curso cadastrado, e que este curso SEJE duplicadoTabela PESFISICA.PCOD (PK) NOME ENDERECO TABELA SERVIDOR .SMATRICULA SITUAÇÃOCOD (FK) CARGOTABELA CURSOPFEXT.CCODCURSO(PK)NOME CURSOCODPESFIS(FKSELECT *FROM PESFISICA.P, SERVIDOR.S WHERE PESFISICA.P . COD.P = SERVIDOR.S . COD.P and SITUACAO = 1 (SE ELE ESTA ATIVO OU não)and PESFISICA.P . COD.Pin (select CURSOPFEXT.C . COD.P from CURSOPFEXT.C) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 5, 2010 Denunciar Share Postado Março 5, 2010 Boa tarde Diego, Dê uma olhada no script... mas antes uma pergunta: cadê o "alias"? rs...SELECT * FROM PESFISICA.P, SERVIDOR.S, CURSOPFEXT.C WHERE PESFISICA.P.COD.P=SERVIDOR.S.COD.P and SITUACAO = 1 and PESFISICA.P.COD.P = CURSOPFEXT.C.CODPESFIS and CURSOPFEXT.C.CODCURSO in (select CODCURSO from CURSOPFEXT.C group by CODCURSO having count (CODCURSO)>1) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Março 5, 2010 Autor Denunciar Share Postado Março 5, 2010 E ai Fulvio, beleza??rapaz... acho que não entendi esse alias... mas perdao... e porque so meio leigo... rsmeu problema e o seguinte... seu script me fez chega numa conclusao que eu não sabia que funcionava assim... e porque eu so novo nesta empresa... e eu não aprendi ainda todo o banco de dados.... mas vamos la.ex: '' 130 diego souza rua luiz avidos ...'' '' 92 pedagogia 01/01/2009 13/12/2009 ... '' '' 93 pedagogia 01/01/2010 13/12/2009 ... '' Ai tipo assim... o usuario conseguia incluir o mesmo curso mais de uma vez... pois ele não testava na hora de gravar o campo nome... so testava o campo periodo de inicio e termino de curso... ai eles cadastraram mais de uma pessoa com o mesmo curso... porem de data de inicio e fim diferente...eu preciso fazer um levantamento... so que quando cadastro uma pessoa, eu tenho que adcionar essa pessoa na tabela servidor, pois é na tabela servidor que indico se essa pessoa esta ativo (trabalhando) ou não... e o codigo dele no sistema e gerado nesse cadastro de servidor tambem!!!!!!Conseguiu entender???eu to tendo umas dificuldades pois eu não trabalhava com sql... tinha uma noção...!!!abraço!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 5, 2010 Denunciar Share Postado Março 5, 2010 Boa tarde Diego, Com este script você consegue verificar se os nomes estão iguais também. Ao invés de agrupar por codigo, agrupe por "NOME CURSO". Ficaria assim:SELECT * FROM PESFISICA.P, SERVIDOR.S, CURSOPFEXT.C WHERE PESFISICA.P.COD.P=SERVIDOR.S.COD.P and SITUACAO = 1 and PESFISICA.P.COD.P = CURSOPFEXT.C.CODPESFIS and CURSOPFEXT.C.NOMECURSO in (select NOMECURSO from CURSOPFEXT.C group by NOMECURSO having count (NOMECURSO)>1) Caso queria acrescentar as datas Inicial e Final, também pode colocar no script. Ficaria assim: SELECT * FROM PESFISICA.P, SERVIDOR.S, CURSOPFEXT.C WHERE PESFISICA.P.COD.P=SERVIDOR.S.COD.P and SITUACAO = 1 and PESFISICA.P.COD.P = CURSOPFEXT.C.CODPESFIS and CURSOPFEXT.C.NOMECURSO in (select NOMECURSO from CURSOPFEXT.C group by NOMECURSO, ColoqueDataInicial, ColoqueDataFinal having count (NOMECURSO)>1)OBS: o group by com a data inicial e final só vai funcionar se elas forem iguais. Como está fazendo um levantamento, seria interessante identificar se há interceção entre as datas com descritivos iguais. Aí é outros 500 rs... Se tiver alguma dúvida, pode postar... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Março 10, 2010 Autor Denunciar Share Postado Março 10, 2010 Boa tarde Diego, Com este script você consegue verificar se os nomes estão iguais também. Ao invés de agrupar por codigo, agrupe por "NOME CURSO". Ficaria assim:SELECT * FROM PESFISICA.P, SERVIDOR.S, CURSOPFEXT.C WHERE PESFISICA.P.COD.P=SERVIDOR.S.COD.P and SITUACAO = 1 and PESFISICA.P.COD.P = CURSOPFEXT.C.CODPESFIS and CURSOPFEXT.C.NOMECURSO in (select NOMECURSO from CURSOPFEXT.C group by NOMECURSO having count (NOMECURSO)>1) Caso queria acrescentar as datas Inicial e Final, também pode colocar no script. Ficaria assim: SELECT * FROM PESFISICA.P, SERVIDOR.S, CURSOPFEXT.C WHERE PESFISICA.P.COD.P=SERVIDOR.S.COD.P and SITUACAO = 1 and PESFISICA.P.COD.P = CURSOPFEXT.C.CODPESFIS and CURSOPFEXT.C.NOMECURSO in (select NOMECURSO from CURSOPFEXT.C group by NOMECURSO, ColoqueDataInicial, ColoqueDataFinal having count (NOMECURSO)>1)OBS: o group by com a data inicial e final só vai funcionar se elas forem iguais. Como está fazendo um levantamento, seria interessante identificar se há interceção entre as datas com descritivos iguais. Aí é outros 500 rs... Se tiver alguma dúvida, pode postar...Eu conseguir achar todos aqueles que tem mais de um curso cadastrados... mas ainda não filtro aquele processo de vim somente os cursos com mesmo nome!!!!! .... eu usei esse codidoSELECT *FROM PES, SERV , CURSWHERE PES.CODPES = SERV.CODPESAND SITUACAOPES = 1AND PES.CODPES = CURS.CODPESAND CURS.NOMECURS IN (select NOMECURS from CURS group by NOMECURS having count (NOMECURS)>1) [code]ESSE AI FUNCIONOU PARA ACHAR OS SERVIDORES QUE ESTAO COM MAIS DE 1 CURSO CADASTRADOS!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 10, 2010 Denunciar Share Postado Março 10, 2010 Bom dia Diego, Não entendi direito.SELECT * FROM PES, SERV , CURS WHERE PES.CODPES = SERV.CODPES AND SITUACAOPES = 1 AND PES.CODPES = CURS.CODPES AND CURS.NOMECURS IN (select NOMECURS from CURS group by NOMECURS having count (NOMECURS)>1) Esse select deve ter te retornado as pessoas que estão cadastradas em mais de um curso, sendo estes cursos duplicados pelo nome, ok? Por causa do "having count >1", apenas aparecerá os cursos duplicados. você quer agora todos os cursos com o nome duplicado? Caso seja isso, execute somente o subselect: select NOMECURS from CURS group by NOMECURS having count (NOMECURS)>1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Março 10, 2010 Autor Denunciar Share Postado Março 10, 2010 Bom dia Diego, Não entendi direito.SELECT * FROM PES, SERV , CURS WHERE PES.CODPES = SERV.CODPES AND SITUACAOPES = 1 AND PES.CODPES = CURS.CODPES AND CURS.NOMECURS IN (select NOMECURS from CURS group by NOMECURS having count (NOMECURS)>1) Esse select deve ter te retornado as pessoas que estão cadastradas em mais de um curso, sendo estes cursos duplicados pelo nome, ok? Por causa do "having count >1", apenas aparecerá os cursos duplicados. você quer agora todos os cursos com o nome duplicado? Caso seja isso, execute somente o subselect: select NOMECURS from CURS group by NOMECURS having count (NOMECURS)>1Dexa eu te explicar melhor pois eu fui muito superficial... rsss... eu quero tirar todos os servidores que possuem o mesm curso cadastrado mais de uma vez... por exemplo''eu tenho uma pessoa cadastrada no sistema''nome: diego de souza cursos: 1001 - pedagogia 1002 - pedagogianome: maria da silvacursos: 3500 - informatica 3501 - ingles o meu sistema cadastra o curso dentro do cadastro de pessoa... sendo que não posso consultar cursos que foram cadastrados anteriormente... ele abre um novo cadastro a medida que eu estou incluindo uma nova pessoa... ai teve uns usuarios que quando cadastraram esses cursos... erraram na data de inicio e fim do curso, ai foram e incluiram o curso novamente com a data certa... ai eu preciso listar todas as pessoas que tem o curso repetido dentro do seu cadastro como no exemplo ai acima do diego de souza... pra você entender um pouquinho melhor meu banco eu deixei no primeiro post. o exemplo da telas!!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 10, 2010 Denunciar Share Postado Março 10, 2010 Boa tarde Diego, Dá uma olhada neste script: recupera as pessoas que possuem cadastro em cursos duplicados.SELECT * from PES where CODPES in (select CODPES from CURS group by NOMECURS,CODPES having count (NOMECURS)>1) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Março 11, 2010 Autor Denunciar Share Postado Março 11, 2010 Boa tarde Diego, Dá uma olhada neste script: recupera as pessoas que possuem cadastro em cursos duplicados.SELECT * from PES where CODPES in (select CODPES from CURS group by NOMECURS,CODPES having count (NOMECURS)>1)Esse é o script... deu certo... !!!! Maravilha!!!! Brigado mais uma vez Fulvio!!!!Este ta resolvido!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Março 11, 2010 Denunciar Share Postado Março 11, 2010 Bom dia Diego, rs... De nada!! :.) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
DiegoVix
Bom Tarde!!!
estou precisando selecionar os servidores que estao ativos, que tem mais de um curso cadastrado, e que este curso SEJE duplicado
Tabela PESFISICA.P
COD (PK)
NOME
ENDERECO
TABELA SERVIDOR .S
MATRICULA
SITUAÇÃO
COD (FK)
CARGO
TABELA CURSOPFEXT.C
CODCURSO(PK)
NOME CURSO
CODPESFIS(FK
SELECT *
FROM PESFISICA.P, SERVIDOR.S
WHERE PESFISICA.P . COD.P = SERVIDOR.S . COD.P
and SITUACAO = 1 (SE ELE ESTA ATIVO OU não)
and PESFISICA.P . COD.P
in (select CURSOPFEXT.C . COD.P from CURSOPFEXT.C)
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.