Pular para o conteúdo
  • Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 5 anos, 10 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #117721
    Fernando Nuñez
    Participante

      Boa Tarde,
      Tenho uma situação com a nova lei das férias fracionadas, tem funcionários que tem férias que serão tiradas de 1x, 2x ou 3x, então o grande problema é que o período aquisitivo é o mesmo, preciso trazer essas colunas adicionais quando elas existiram na mesma linha do funcionário. Emplo hoje é assim:
      1º Situação
      Funcionário , periodo_aquisitivo, DataInicio, DataFim,
      10 16/04/2017 a 15/04/2018 02/01/2019 16/01/2019
      10 16/04/2017 a 15/04/2018 06/03/2019 20/03/2019

      2º Situação
      Funcionário , periodo_aquisitivo, DataInicio, DataFim,
      15 16/04/2017 a 15/04/2018 02/01/2019 15/01/2019
      15 16/04/2017 a 15/04/2018 11/02/2019 19/02/2019
      15 16/04/2017 a 15/04/2018 06/03/2019 14/03/2019

      Então preciso que o relatório saia dessa forma:
      Funcionário,fim_periodo, DataInicio,DataFim, DataInicio2, DataFim2, DataInicio3, DataFim3,
      10 15/04/2018 02/01/2019 16/01/2019 06/03/2019 20/03/2019
      15 15/04/2018 02/01/2019 15/01/2019 11/02/2019 19/02/2019 06/03/2019 14/03/2019

      Poderiam me dizer como fazer isso no plsql?

      #117723
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Blz ? Isso que vc descreve é uma operação chamada PIVOT, e é bem simples, se a sua versão do RDBMS Oracle é 11g ou superior : já há um comando próprio pra isso, é o comando PIVOT… Veja https://www.oracle.com/technetwork/pt/articles/sql/principais-caracteristicas-database-2108383-ptb.html e https://www.techonthenet.com/oracle/pivot.php como exemplos….

        []s

        Chiappa

        #117878
        Fernando Nuñez
        Participante

          Olá Chiappa,

          Eu conheço o PIVOT, mas a questão é que como são muitos funcionários e as datas variadas, preciso de um exemplo de como usar como campos e não com datas predefinidas, como normalmente temos nos exemplo do PIVOT, ou seja se eu colocar as datas na mão vai, mas o relatório como é uma coisa dinâmica onde as vezes a pessoa tem uma férias de 30 dias, a outra tem 2 de 15 dias e uma outra tem 3 férias uma de 14 outra de 8 e outra de 8, então preciso trabalhar com campos e não com valores fixos se me entente, espero ter conseguido explicar mais ou menos o que preciso!

          #118056
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Blz ? Então, se fosse possível vc estabelecer um número máximo de colunas ok, vc ainda pode usar o PIVOT, mas se (como parece ser o caso) for Realmente Desconhecido o número de colunas, aí vai ser necessária uma programação bem mais complexa, nenhuma built-in pode te ajudar, acredito : dá um look em https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1708806700346411058 , onde há um pequeno exemplo com COLLECTIONS… Ou, noutra possibilidade, vc pode ter um SQL dinâmico que encontre o número de colunas, vide http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:913597000346917617 ….
            Mas ambas as soluções vão ser COmplexas. acredito…

            Abraços,

            Chiappa

            #118057
            Avatar photoJosé Laurindo Chiappa
            Moderador

              Ah, só pra saber : vc CONCATENAR numa só coluna as N valores não te serve, né ? Pergunto porque se servir vc talvez possa usar LISTAGG, essa built-in te transforma isto :

              JOAO 11/12/2018
              JOAO 13/01/2019
              JOAO 20/02/2018

              nisso :

              JOAO 11/12/2018,13/01/2019,20/02/2018

              OU SEJA, ao invés de vc criar N colunas que vc não sabe nem quantas são (algo COMPLEXO de fazer, mas possível), vc AGREGA n valores numa só coluna, com os valores separados por um caracter qquer….

              []s

              Chiappa

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