- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 5 anos, 9 meses atrás por José Laurindo Chiappa.
-
AutorPosts
-
11 de fevereiro de 2019 às 5:38 pm #117721Fernando NuñezParticipante
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/20192º 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/2019Entã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/2019Poderiam me dizer como fazer isso no plsql?
11 de fevereiro de 2019 às 5:50 pm #117723José Laurindo ChiappaModeradorBlz ? 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
12 de fevereiro de 2019 às 10:46 am #117878Fernando NuñezParticipanteOlá 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!
13 de fevereiro de 2019 às 7:47 pm #118056José Laurindo ChiappaModeradorBlz ? 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
13 de fevereiro de 2019 às 7:51 pm #118057José Laurindo ChiappaModeradorAh, 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/2018nisso :
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
-
AutorPosts
- Você deve fazer login para responder a este tópico.