- Este tópico contém 10 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 5 meses atrás por
VINI85.
-
AutorPosts
-
21 de setembro de 2010 às 8:52 pm #96178
VINI85
ParticipanteBoa tarde GPO,
Estou com uma dúvida:
Tenho uma tabela de funcionários com os campos CODIGO, SITUACAO E DATAADMISSAO.
SENDO QUE:
CAMPO CÓDIGO SERIA O CÓDIGO DO FUNCIONÁRIO.
CAMPO SITUAÇÃO A – ATIVO D – DEMITIDO.
CAMPO DATAADMISSAO DD/MM/AAAA.PRECISO MONTAR UMA SQL QUE ME RETORNE TODOS OS FUNCIONÁRIOS ATIVOS SEPARADOS POR MÊS.
EX: PRECISO CONTAR QUANTOS FUNCIONÁRIOS ERAM ATIVOS ATÉ JANEIRO, FEVEREIRO, MARÇO….
ABRAÇO.
21 de setembro de 2010 às 9:00 pm #96179Regis Araujo
ParticipanteFala Vini..!! Boa tarde..!!!
Bom.. para isto.. vc vai precisar fazer um CASE com COUNT..!!
Mais ou menos assim..
SELECT
COUNT( CASE WHEN TO_CHAR(DATAADMISSAO, 'MM') = '01' AND SITUACAO = 'A' THEN 1 ELSE NULL END) JANEIRO,
COUNT( CASE WHEN TO_CHAR(DATAADMISSAO, 'MM') = '02' AND SITUACAO = 'A' THEN 1 ELSE NULL END) FEVEREIRO
FROM FUNCIONARIOS;
Existem outras maneiras.. mais performaticas e tal.. mas se isto for apenas para um relatório.. ble.. se for para rodar sempre.. ai vc vai precisar de algo mais performatico..
Abraços..!
[/code]
21 de setembro de 2010 às 9:31 pm #96180VINI85
Participante[quote=”Thunder_Catz”:3gf00186]Fala Vini..!! Boa tarde..!!!
Bom.. para isto.. vc vai precisar fazer um CASE com COUNT..!!
Mais ou menos assim..
SELECT
COUNT( CASE WHEN TO_CHAR(DATAADMISSAO, 'MM') = '01' AND SITUACAO = 'A' THEN 1 ELSE NULL END) JANEIRO,
COUNT( CASE WHEN TO_CHAR(DATAADMISSAO, 'MM') = '02' AND SITUACAO = 'A' THEN 1 ELSE NULL END) FEVEREIRO
FROM FUNCIONARIOS;
Existem outras maneiras.. mais performaticas e tal.. mas se isto for apenas para um relatório.. ble.. se for para rodar sempre.. ai vc vai precisar de algo mais performatico..
Abraços..!
[/code][/quote]
Fala Thunder,
Então mas não preciso só dos que foram admitidos em Janeiro, preciso na colula janeiro pegar todos os ativos até janeiro, em fevereiro pegar todos os ativos até fevereiro.
21 de setembro de 2010 às 9:57 pm #96181Leonardo Litz
ParticipanteTenta assim:
SELECT
COUNT( CASE WHEN TO_CHAR(DATAADMISSAO, 'MM') < to_date('01/01/2010','dd/mm/rrrr') AND SITUACAO = 'A' THEN 1 ELSE NULL END) JANEIRO,
COUNT( CASE WHEN TO_CHAR(DATAADMISSAO, 'MM') < to_date('01/02/2010','dd/mm/rrrr') AND SITUACAO = 'A' THEN 1 ELSE NULL END) FEVEREIRO
FROM FUNCIONARIOS;Vlw Leonardo Litz
21 de setembro de 2010 às 10:01 pm #96182Leonardo Litz
ParticipanteOpa faltou uma coisa, esqueci de tirar a formatacao da data de emissão:
SELECT
COUNT( CASE WHEN DATAADMISSAO < to_date('01/01/2010','dd/mm/rrrr') AND SITUACAO = 'A' THEN 1 ELSE NULL END) JANEIRO,
COUNT( CASE WHEN DATAADMISSAO < to_date('01/02/2010','dd/mm/rrrr') AND SITUACAO = 'A' THEN 1 ELSE NULL END) FEVEREIRO
FROM FUNCIONARIOS;21 de setembro de 2010 às 10:04 pm #96183burga
ParticipanteTem alguma coluna datademissao ou algo parecido? Pra saber até qual data um funcionário estava ativo?
Qual o mecanismo pra saber o momento em que um funcionário passou do estado ativo pra demitido?
21 de setembro de 2010 às 10:04 pm #96184Regis Araujo
ParticipanteOpa..!
Só uma dúvida Litz.. a data não seria o ultimo dia de cada mês para pegar Janeiro (31/01/2010) , Fevereiro (28/02/2010) e assim por diante?
Abraços..!
21 de setembro de 2010 às 10:16 pm #96187VINI85
Participante[quote=”burga”:2xdm81cb]Tem alguma coluna datademissao ou algo parecido? Pra saber até qual data um funcionário estava ativo?
Qual o mecanismo pra saber o momento em que um funcionário passou do estado ativo pra demitido?[/quote]
Fala Burga,
Tem sim coluna DATADEMISSAO..
Quando o funcionário é desligado ele fica com a SITUACAO = ‘D’.
Abraço.
21 de setembro de 2010 às 10:50 pm #96189Leonardo Litz
ParticipanteOlá Thunder_Catz
Citei aquela data como exemplo de como fazer, mas se for o ultimo dia do mês:
SELECT
COUNT( CASE WHEN DATAADMISSAO < last_day(to_date('01/01/2010','dd/mm/rrrr')) AND SITUACAO = 'A' THEN 1 ELSE NULL END) JANEIRO,
COUNT( CASE WHEN DATAADMISSAO < last_day(to_date('01/02/2010','dd/mm/rrrr')) AND SITUACAO = 'A' THEN 1 ELSE NULL END) FEVEREIRO
FROM FUNCIONARIOS;Vlw Leonardo Litz
21 de setembro de 2010 às 11:40 pm #96192burga
ParticipanteNão sei se entendi direito, mas olha onde eu cheguei:
WITH DATAS AS (
SELECT TRUNC(MIN(DATAADMISSAO),'MM') DATA1, LAST_DAY(SYSDATE) DATA2
FROM FUNCIONARIOS),
DATAS2 AS (
SELECT TRUNC(ADD_MONTHS(DATA1, LEVEL - 1),'MM') DATA_PESQUISA
FROM DATAS
CONNECT BY TRUNC(ADD_MONTHS(DATA1, LEVEL - 1),'MM') <= DATA2
ORDER BY 1)
SELECT TO_CHAR(DATA_PESQUISA,'MM/YYYY') MES_ANO, COUNT(*) NUMERO_FUNCIONARIOS
FROM FUNCIONARIOS, DATAS2
WHERE DATA_PESQUISA
BETWEEN TRUNC(DATAADMISSAO,'MM')
AND LAST_DAY(NVL(DATADEMISSAO,SYSDATE))
GROUP BY TO_CHAR(DATA_PESQUISA,'MM/YYYY');Neste caso, é considerada a data de demissão e não a situação… E se funcionario foi demitido em qualquer dia de janeiro, ele ainda é contado no mês de janeiro, funcionários admitidos no mês também são contados…
Espero que entenda a bagunça do código!! Pode ter erro pois não tenho como testar aqui…
21 de setembro de 2010 às 11:58 pm #96193VINI85
Participante[quote=”burga”:3rcz02sw]Não sei se entendi direito, mas olha onde eu cheguei:
WITH DATAS AS (
SELECT TRUNC(MIN(DATAADMISSAO),'MM') DATA1, LAST_DAY(SYSDATE) DATA2
FROM FUNCIONARIOS),
DATAS2 AS (
SELECT TRUNC(ADD_MONTHS(DATA1, LEVEL - 1),'MM') DATA_PESQUISA
FROM DATAS
CONNECT BY TRUNC(ADD_MONTHS(DATA1, LEVEL - 1),'MM') <= DATA2
ORDER BY 1)
SELECT TO_CHAR(DATA_PESQUISA,'MM/YYYY') MES_ANO, COUNT(*) NUMERO_FUNCIONARIOS
FROM FUNCIONARIOS, DATAS2
WHERE DATA_PESQUISA
BETWEEN TRUNC(DATAADMISSAO,'MM')
AND LAST_DAY(NVL(DATADEMISSAO,SYSDATE))
GROUP BY TO_CHAR(DATA_PESQUISA,'MM/YYYY');Neste caso, é considerada a data de demissão e não a situação… E se funcionario foi demitido em qualquer dia de janeiro, ele ainda é contado no mês de janeiro, funcionários admitidos no mês também são contados…
Espero que entenda a bagunça do código!! Pode ter erro pois não tenho como testar aqui…[/quote]
Gerei a sentença mas não retornou nenhum valor.
Vou ver oq consigo aqui galera.
Um forte abraço e obrigado pela ajuda de todos. -
AutorPosts
- Você deve fazer login para responder a este tópico.