Dúvida com Pivot

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Boas senhores, apanhando para fazer um pivot.

Tenho o seguinte select:

Selecionar tudo

select departamento,dt_dia,valor from tabela where mês = '01/2018'
resulta

Selecionar tudo

dept    data            valor
dep1    01/01/2018      10
dep1    02/01/2018      5
dep4    01/01/2018      10
Gostaria de pivotear onde a data viraria coluna e o valor fosse o retorno desta coluna.
Preciso dos dias como coluna. Seque exemplo

Selecionar tudo

    Depto       d1            d2
1   dep1        10             5
2   dep4        10             0
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Olá xprata,

dá uma olhada no seguinte link (observando que seu banco 11 ou superior):
http://www.oracle.com/technetwork/pt/ar ... 3-ptb.html

Se precisar, olha o tópico a seguir que informações úteis:
http://glufke.net/oracle/viewtopic.php? ... 562#p41562
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Obrigado pelo retorno...as indicações ajudaram...
Agora como tenho que mostrar todos os dias, tive que fazer não a inclusão da query dia a dia, tanto na apresentação quanto no pivot

Selecionar tudo

select nnn...d01,d02,d03....d031
....
pivot 
max(valor)
   for (dt) in (
   '01/01/2018' d01,'02/01/2018'.....31/01/2018 d31...
Tem como fazer um loop para evitar a reescrita? e tb tem o caso de mudar de mês...dai tenho mexer na query
Será q fui claro?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Cara,
Tenta fazer o pivot em cima do campo DIA. Mas na sua consulta você terá os campos mês e ano. Assim você só precisará escrever os 31 dias do mês.
De outra forma você acabará possuindo uma tabela com os 365 colunas para cada dia do ano. Fica inviável.

Selecionar tudo

select extract(day from sysdate) dia_x
     , to_char(sysdate, 'dd')    dia_char
     , sysdate
  from dual;
Agora se você PRECISAR que seja tudo dinâmico, sem precisar escrever dias e etc, veja o final do tópico citado anteriormente.
xprata
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 93
Registrado em: Ter, 06 Abr 2010 11:31 am
Localização: São Paulo - SP

Obrigado...o que vai variar mesmo é o mês...vou fixar os dias
Vou fazer os testes com sua dica...
t+
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes