- Este tópico contém 18 respostas, 3 vozes e foi atualizado pela última vez 12 anos, 11 meses atrás por mpvargas.
-
AutorPosts
-
1 de dezembro de 2011 às 11:49 pm #101997mpvargasParticipante
Caros Amigos,
Gostaria de uma ajuda para criar uma viewCREATE OR REPLACE FORCE VIEW “TESTE”.”V_DADOSFUNC” (“FILIAL”, “MAT”, “NOME”, “SITFOLHA”, “ADMISSAO”, “CPF”, “RG”) AS
(
SELECT filial, mat, nome, sitfolha, admissao, cpf, rg
FROM FUNCIONARIOS
WHERE rescrai <> ’31’
AND mat between ‘100000’ and ‘899999’
AND demissao > ‘20100000’
AND catfunc IN (‘I’,’J’,’M’)Até aqui tudo bem… só que eu preciso selecionar a ultima situação do funcionário na folha, e estou me enrolando na hora de criar a sub-query
No caso, se SITFOLHA = ‘D’ ele foi demitido ou se SITFOLHA = ‘ ‘ ele está ativo… por exemplo, se ele foi demitido e depois voltou para a empresa, eu preciso que a VIEW mostre somente a ultima situaçãoAlguem pode me ajudar
Obs.: Posso ter o mesmo funcionario em filiais diferentes, no caso com o mesmo CPF… pensei em usar uma chave composta com FILIAL+MAT, não sei se seria o mais correto
2 de dezembro de 2011 às 3:49 pm #102003rmanParticipante@mpvargas
Você tem alguma tabela que registre a data de admissão e demissão ?
Será necessário fazer uma um sub-query com o max(data) pra saber a ultima situação.
Poste o DESC das tabelas que ai fica mais facil de entender como foi modelado.
2 de dezembro de 2011 às 4:33 pm #102008mpvargasParticipantefala rman
o DESC da tabela fica muito grande, por isso postei a view
mas nesse mesma tabela (FUNCIONARIOS) tem os campos:
DEMISSAO => data de demissao
ADMISSAO => data de admissaoEssa view é pra checar a situação do funcionario e excluir o seu login do sistema
tentei com a opção MAX(DATA) mas o problema é quando o funcionario é demitido de uma filial mas continua trabalhando em outra filial…
aí nesse caso a ultima situação dele é DEMITIDO, mas ele na verdade ainda está trabalhando em outra filial e nao pode ser excluido2 de dezembro de 2011 às 4:43 pm #102009rmanParticipante@mpvargas
O campo CPF é obrigatório e é confiável, ou posso encontrar o CPF 9999999 lá ?
A matricula é mantida quando ele é demitido em uma filial e admitido em outra ?
Na subquery você terá que adicionar a ligação de filial e matricula ou cpf para isolar por filial.
2 de dezembro de 2011 às 5:25 pm #102012mpvargasParticipanteO campo CPF é obrigatório, não tem 9999 porque tem validação
No casos das matrículas, são diferentes.. vc pode ter para o mesmo funcionário matrículas diferentes… aqui é uma instituição de ensino e existem regras para cargos administrativos ou professor
Por exemplo – Administrativo = matricula de 100000 a 199999
– Professores = matricula de 500000 a 599999Portanto um funcionario pode ser adm e prof
Pode tb ser demitido como prof e continuar como adm na mesma filial
ou ser demitido do adm de uma filial e continuar como prof na mesma filial ou em outra filialpor isso a minha dificuldade, são muitos detalhes
2 de dezembro de 2011 às 9:37 pm #102017fabiogaleraParticipanteNão entendi muito bem.
Você quer uma view que mostre a última interação do funcionário, por acaso você guarda a data dessas interações ?
Poste exemplos de linhas que estão na tabela e que modo você quer elas, assim fica mais fácil.
2 de dezembro de 2011 às 11:59 pm #102022mpvargasParticipantePor exemplo
FILIAL MAT NOME SITFOLHA ADMIS CPF
——- —– ————————————- ———– ——– ———
01 500866 CLAUDIO A. VIEIRA 05081996 XXX
15 800111 CLAUDIO A. VIEIRA D 06042001 XXX
03 501366 CLAUDIO A. VIEIRA 12062002 XXX
01 101403 CLAUDIO A. VIEIRA 14052005 XXXEsse funcionario foi demitido da filial 15
mas trabalha nas filiais 01 e 03 sendo que na filial 01 ele trabalha como professor e na area administrativaCaso ele seja demitido como professor (MAT 500866) ele nao poderá ser excluido da view porque ainda está ativo como administrativo
3 de dezembro de 2011 às 5:58 am #102023fabiogaleraParticipanteEntendi seu problema, é relativamente simples de se resolver.
Porém, uma dúvida para solucionar o problema de vez, como você identifica que esses quatros CLAUDIO A. VIEIRA são a mesma pessoa ? Possui algum tipo de cadastro único ? código da pessoa ? cpf ? ou apenas o nome mesmo ?
5 de dezembro de 2011 às 4:29 pm #102024mpvargasParticipanteFala Fábio,
Eu identifico pelo CPF… são campos únicos e são validados
Eu coloquei XXX mas esses valores são preenchidos, inclusive pra montar esse exemplo eu usei o CPF5 de dezembro de 2011 às 5:42 pm #102025fabiogaleraParticipanteFILIAL MAT NOME SITFOLHA ADMIS CPF
01 500866 CLAUDIO A. VIEIRA 05081996 XXX
15 800111 CLAUDIO A. VIEIRA D 06042001 XXX
03 501366 CLAUDIO A. VIEIRA 12062002 XXX
01 101403 CLAUDIO A. VIEIRA 14052005 XXXNa view irá mostrar:
01 500866 CLAUDIO A. VIEIRA 05081996 XXX
03 501366 CLAUDIO A. VIEIRA 12062002 XXX
01 101403 CLAUDIO A. VIEIRA 14052005 XXXSe sim, basta colocar na clausula where SITFOLHA IS NULL;
Ou você quer apenas 1 linha por funcionário?
5 de dezembro de 2011 às 11:34 pm #102028mpvargasParticipanteCaro Fábio
Eu preciso da ultima situação do funcionário
por exemploEsse funcionario foi demitido da filial 15
mas trabalha nas filiais 01 e 03 sendo que na filial 01 ele trabalha como professor e na area administrativaCaso ele seja demitido como professor (MAT 500866) ele nao poderá ser excluido da view porque ainda está ativo como administrativo
6 de dezembro de 2011 às 6:24 pm #102037fabiogaleraParticipanteExatamente o que estou te dizendo.
CREATE OR REPLACE FORCE VIEW “TESTE”.”V_DADOSFUNC” (“FILIAL”, “MAT”, “NOME”, “SITFOLHA”, “ADMISSAO”, “CPF”, “RG”) AS
(
SELECT filial, mat, nome, sitfolha, admissao, cpf, rg
FROM FUNCIONARIOS
WHERE rescrai ’31’
AND mat between ‘100000’ and ‘899999’
AND demissao > ‘20100000’
AND catfunc IN (‘I’,’J’,’M’)
AND SITFOLHA IS NULL;Não irá adicionar as linhas que possuem o campo diferente de Nulo. Não é isso que você quer ?
Se for a última interação, você precisa fazer diferente.
Você possui a DATA da atualização da linha ?7 de dezembro de 2011 às 5:50 pm #102054mpvargasParticipanteFábio
nos campos SITFOLHA tenho as seguintes situações como principais:
D = Demitido
A = Ativose eu colocar SITFOLHA IS NULL não vem ninguem
Preciso da ultima alteração ou situação, mas não tenho nenhum campo que indique a data de atualização da linha…
O Oracle tem isso?7 de dezembro de 2011 às 7:19 pm #102055rmanParticipante@mpvargas
Você tem em mãos um problema de modelagem, sem a informação da data você não conseguirá resolver esse problema.
7 de dezembro de 2011 às 8:31 pm #102056mpvargasParticipanterman
foi o que pensei… já estudei várias formas de achar uma solução mas está dificil….
obrigado pela ajuda. -
AutorPosts
- Você deve fazer login para responder a este tópico.