Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #96178
    VINI85
    Participante

      Boa 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.

      #96179
      Avatar photoRegis Araujo
      Participante

        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]

        #96180
        VINI85
        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.

          #96181
          Avatar photoLeonardo Litz
          Participante

            Tenta 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

            #96182
            Avatar photoLeonardo Litz
            Participante

              Opa 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;

              #96183
              burga
              Participante

                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?

                #96184
                Avatar photoRegis Araujo
                Participante

                  Opa..!

                  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..!

                  #96187
                  VINI85
                  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.

                    #96189
                    Avatar photoLeonardo Litz
                    Participante

                      Olá 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

                      #96192
                      burga
                      Participante

                        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…

                        #96193
                        VINI85
                        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.

                        Visualizando 11 posts - 1 até 11 (de 11 do total)
                        • Você deve fazer login para responder a este tópico.