Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

thiagotsp

criar as colunas dos meses e incluir o referido valor de cada um

Recommended Posts

prezados, boa tarde!
tenho as seguintes queries que me trazem os seguintes resultados.
Query 1 -- PAM ASSISTIDOS

 

select det.cdfavdvd NSU,

       etd.nm_etd NOME,
       pti.nu_pti_icr INSCRICAO,
       to_char(c.dtpag, 'yyyy') ANO_PAG,
       to_char(c.dtpag, 'mm') MES_PAG,
       sum(det.vrliqpag) VAL_PAM
  from fin_lancontaspagar    c,
       fin_lancontaspagardet det,
       etd_elet              etd,
       pti_cad               pti
 where c.cdeve = '546'
   and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
       c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
   and pti.cd_etd_idt    = etd.cd_etd_idt
   and c.nrdoc           = det.nrdoc
   and det.cdfavdvd      = etd.cd_etd_idt
   and (pti.dt_pti_dlg_mov is null or
       pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
 group by det.cdfavdvd,
          etd.nm_etd,
          pti.nu_pti_icr,
          to_char(c.dtpag, 'yyyy'),
          to_char(c.dtpag, 'mm')
 order by 3, 4, 5 

 

resultado:
NSU NOME INSCRICAO ANO_PAG MES_PAG VAL_PAM
83595 ADILSON PEREIRA 0000182 2013 01 268,75
83595 ADILSON PEREIRA 0000182 2013 02 268,75
83595 ADILSON PEREIRA 0000182 2013 03 268,75
83595 ADILSON PEREIRA 0000182 2013 04 268,75
83818 ALMIR PEREIRA 0000422 2013 01 654,46
83818 ALMIR PEREIRA DE A 0000422 2013 02 654,46
83818 ALMIR PEREIRA DE A 0000422 2013 03 654,46
83818 ALMIR PEREIRA DE A 0000422 2013 04 654,46
85144 EDVALDO LOPES 0001768 2013 01 582,04
85144 EDVALDO LOPES 0001768 2013 02 582,04
85144 EDVALDO LOPES 0001768 2013 03 582,04
85144 EDVALDO LOPES 0001768 2013 04 582,04
85326 ERNANI MENDONCA 0001941 2013 01 353,18
85326 ERNANI MENDONCA 0001941 2013 02 353,18
Query 2 -- PAM PENSIONISTAS

 

select det.cdfavdvd nsu,

       etd.nm_etd nome,
       pns.nu_pns_icr inscricao,
       to_char(c.dtpag, 'yyyy') ano,
       to_char(c.dtpag, 'mm') mes,
       sum(det.vrliqpag) valor
  from fin_lancontaspagar    c,
       fin_lancontaspagardet det,
       etd_elet              etd,
       pns_cad_brc           pns
 where c.cdeve = '546'
   and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
       c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
   and pns.cd_etd_idt = etd.cd_etd_idt
   and c.nrdoc = det.nrdoc
   and det.cdfavdvd = etd.cd_etd_idt
   and (pns.dt_pns_dlg_mov is null or
       pns.dt_pns_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
   and pns.cd_etd_idt not in
      


       
(select det.cdfavdvd nsu
          from fin_lancontaspagar    c,
               fin_lancontaspagardet det,
               etd_elet              etd,
               pti_cad               pti
         where c.cdeve in ('546', '551', '552')
           and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
               c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
           and pti.cd_etd_idt = etd.cd_etd_idt
           and c.nrdoc = det.nrdoc
           and det.cdfavdvd = etd.cd_etd_idt
           and (pti.dt_pti_dlg_mov is null or
               pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
         group by det.cdfavdvd,
                  etd.nm_etd,
                  pti.nu_pti_icr,
                  to_char(c.dtpag, 'yyyy'),
                  to_char(c.dtpag, 'mm'))
 group by det.cdfavdvd,
          etd.nm_etd,
          pns.nu_pns_icr,
          to_char(c.dtpag, 'yyyy'),
          to_char(c.dtpag, 'mm')
 order by 3, 5

 

Resultado:
NSU NOME INSCRICAO ANO MES VALOR
128621 CELIDA C COSTA E SOUZA 9003104 2013 01 793,47
128621 CELIDA C COSTA E SOUZA 9003104 2013 02 793,47
128621 CELIDA C COSTA E SOUZA 9003104 2013 03 793,47
128621 CELIDA C COSTA E SOUZA 9003104 2013 04 793,47
128896 MARLY RODRIGUES DE LIRA 9003385 2013 01 660,68
128896 MARLY RODRIGUES DE LIRA 9003385 2013 02 660,68
128896 MARLY RODRIGUES DE LIRA 9003385 2013 03 660,68
128896 MARLY RODRIGUES DE LIRA 9003385 2013 04 660,68
129620 ENAURA O DOS S FIGUEIRA 9004805 2013 01 1152,01
129620 ENAURA O DOS S FIGUEIRA 9004805 2013 02 1152,01
129620 ENAURA O DOS S FIGUEIRA 9004805 2013 03 1152,01
129620 ENAURA O DOS S FIGUEIRA 9004805 2013 04 1152,01
131468 GENI SILVA LINHARES 9007089 2013 01 214,45
131468 GENI SILVA LINHARES 9007089 2013 02 214,45
E a união dessas duas queries me trás o seguinte resultado:
Query

 

select det.cdfavdvd NSU,

       etd.nm_etd PARTICIPANTE,
       pti.nu_pti_icr INSCRICAO,
       to_char(c.dtpag, 'yyyy') ANO,
       to_char(c.dtpag, 'mm') MES,
       sum(det.vrliqpag) VALOR
  from fin_lancontaspagar    c,
       fin_lancontaspagardet det,
       etd_elet              etd,
       pti_cad               pti
 where c.cdeve = '546'
   and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
       c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
   and pti.cd_etd_idt    = etd.cd_etd_idt
   and c.nrdoc           = det.nrdoc
   and det.cdfavdvd      = etd.cd_etd_idt
   and (pti.dt_pti_dlg_mov is null or
       pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
 group by det.cdfavdvd,
          etd.nm_etd,
          pti.nu_pti_icr,
          to_char(c.dtpag, 'yyyy'),
          to_char(c.dtpag, 'mm')


 union 




select det.cdfavdvd NSU,

       etd.nm_etd PARTICIPANTE,
       pns.nu_pns_icr INSCRICAO,
       to_char(c.dtpag, 'yyyy') ANO,

       to_char(c.dtpag, 'mm') MES,
       sum(det.vrliqpag) VALOR
  from fin_lancontaspagar    c,
       fin_lancontaspagardet det,
       etd_elet              etd,
       pns_cad_brc           pns
 where c.cdeve = '546'
   and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
       c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
   and pns.cd_etd_idt = etd.cd_etd_idt
   and c.nrdoc = det.nrdoc
   and det.cdfavdvd = etd.cd_etd_idt
   and (pns.dt_pns_dlg_mov is null or
       pns.dt_pns_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
   and pns.cd_etd_idt not in
      
       
(select det.cdfavdvd nsu
          from fin_lancontaspagar    c,
               fin_lancontaspagardet det,
               etd_elet              etd,
               pti_cad               pti
         where c.cdeve in ('546', '551', '552')
           and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
               c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
           and pti.cd_etd_idt = etd.cd_etd_idt
           and c.nrdoc = det.nrdoc
           and det.cdfavdvd = etd.cd_etd_idt
           and (pti.dt_pti_dlg_mov is null or
               pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
         group by det.cdfavdvd,
                  etd.nm_etd,
                  pti.nu_pti_icr,
                  to_char(c.dtpag, 'yyyy'),
                  to_char(c.dtpag, 'mm'))
 group by det.cdfavdvd,
          etd.nm_etd,
          pns.nu_pns_icr,
          to_char(c.dtpag, 'yyyy'),
          to_char(c.dtpag, 'mm')
 order by 2, 5

 

Resultado :
NSU PARTICIPANTE INSCRICAO ANO MES VALOR
106460 ADELMA RAMALHO DA COSTA 0023606 2013 01 400,87
106460 ADELMA RAMALHO DA COSTA 0023606 2013 02 389,88
106460 ADELMA RAMALHO DA COSTA 0023606 2013 03 383,42
106460 ADELMA RAMALHO DA COSTA 0023606 2013 04 376,31
98693 ADEMAR INACIO DA SILVA 0066068 2013 01 790,63
98693 ADEMAR INACIO DA SILVA 0066068 2013 02 785,91
98693 ADEMAR INACIO DA SILVA 0066068 2013 03 785,91
98693 ADEMAR INACIO DA SILVA 0066068 2013 04 785,91
93080 ADEMARIO DOS SANTOS 0009845 2013 01 436,52
93080 ADEMARIO DOS SANTOS 0009845 2013 02 436,52
93080 ADEMARIO DOS SANTOS 0009845 2013 03 436,52
93080 ADEMARIO DOS SANTOS 0009845 2013 04 436,52
83595 ADILSON PEREIRA DA SILVA 0000182 2013 01 268,75
Agora eis a questão, eu preciso que que o select me retorne da maneira que me
pediram aqui no trabalha, ou seja dessa forma.
Inscrição Participante JAN FEV MAR ABR
23606 Adelma Ramalho da Costa 189,69 185,33 181,93 180,48
66068 Ademar Inacio da Silva 424,13 424,13 424,14 424,14
9845 Ademario dos Santos 214,86 214,86 214,88 214,88
182 Adilson Pereira da Silva 96,38 96,38 96,39 96,39
9902933 Aida Marins Atallah 96,32 128,39 189,36 128,21
7476 Ailton de Castro Viana 106,33 106,33 106,35 106,35
24141 Alamier Salles da Silva 235,71 235,71 235,73 235,73
9901810 Alayde D´Oliveira Hemerly 128,33 369,66 248,37 325,33
32029 Alba José de Oliveira 474,96 474,96 474,98 474,98
12229 Alberto Carlos T da Silva 392,88 392,88 392,88 392,91
Então, gostaria da saber como faço para criar as colunas dos meses e incluir o referido
valor de cada um como eles pediram no ex: acima.Nas tabelas anteriores tem a coluna valor
e a tabela mes em formato numeral, eu quero fazer como no último exemplo, quando os
meses estão em colunas e os valores ficam numa única linha.
Até pensei em fazer assim ''JAN, ''FEV, ''MAR ... ...
Mas não sei como colocar o respectivo valor de cada pessoa,
e aparecer somente uma vez o nome de cada um, ou seja, um nome por linha. Ficaria assim:
NSU PARTICIPANTE INSCRICAO JAN FEV MAR ABR ANO MES VALOR
106460 ADELMA RAMALHO DA COSTA 0023606 2013 01 376,31
106460 ADELMA RAMALHO DA COSTA 0023606 2013 02 400,87
106460 ADELMA RAMALHO DA COSTA 0023606 2013 03 389,88
106460 ADELMA RAMALHO DA COSTA 0023606 2013 04 383,42
98693 ADEMAR INACIO DA SILVA 0066068 2013 01 785,91
98693 ADEMAR INACIO DA SILVA 0066068 2013 02 785,91
98693 ADEMAR INACIO DA SILVA 0066068 2013 03 790,63
98693 ADEMAR INACIO DA SILVA 0066068 2013 04 785,91
93080 ADEMARIO DOS SANTOS 0009845 2013 01 436,52
93080 ADEMARIO DOS SANTOS 0009845 2013 02 436,52
93080 ADEMARIO DOS SANTOS 0009845 2013 03 436,52
93080 ADEMARIO DOS SANTOS 0009845 2013 04 436,52
83595 ADILSON PEREIRA DA SILVA 0000182 2013 01 268,75
Espero mesmo do fundo do coração que vocÊs possam me ajudar, minha vida de estagiário está
correndo risco. rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use PIVOT ou CASE.

Fala Motta, boa tarde meu camarada!

Como assim?

Tem como fazer um exemplo?

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, sou estudante de ciência da computação, estou no 4º período e estou estagiando, porém não saco muita coisa ainda de banco de dados, trabalhei muito com suporte.

Teria como me darem um exemplo colocando as minhas tabelas?

Agradeço mesmo de coração!!!

E desculpa ai mais uma vez por qualquer coisa!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pegue a 3@ query do seu post e a faça uma tabela virtual, tente com pivot.

 

 

 

Select *
From
(
Select ...
) pivot (sum(valor) for(mes))

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Pegue a 3@ query do seu post e a faça uma tabela virtual, tente com pivot.

 

 

 

Select *
From
(
Select ...
) pivot (sum(valor) for(mes))

Motta, bom dia!

Tentei fazer da seguinte forma:

 

 

Select * From
(
Select etd.nm_etd PARTICIPANTE,
pti.nu_pti_icr INSCRICAO,
to_char(c.dtpag, 'yyyy') ANO,
to_char(c.dtpag, 'mm') MES,
sum(det.vrliqpag) VALOR
from fin_lancontaspagar c,
fin_lancontaspagardet det,
etd_elet etd,
pti_cad pti
where c.cdeve = '546'
and (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
and pti.cd_etd_idt = etd.cd_etd_idt
and c.nrdoc = det.nrdoc
and det.cdfavdvd = etd.cd_etd_idt
and (pti.dt_pti_dlg_mov is null or
pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
) pivot (sum(det.vrliqpag) for( to_char(c.dtpag, 'mm')) IN ('1' as JAN, '2' as FEV, '3' as MAR, '4' as ABR, '5' as MAI, '6' as JUN, '7' as JUL, '8' as AGO, '9' as
SETE, '10' as OUTU, '11' as NOV, '10' as DEZ));
Mas não deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente

 

 

Select PARTICIPANTE,INSCRICAO,ANO
From

(
Select etd.nm_etd PARTICIPANTE,

       pti.nu_pti_icr INSCRICAO,

       to_char(c.dtpag, 'yyyy') ANO,
       to_char(c.dtpag, 'mm') MES, ...

Que deu de errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente

 

 

Select PARTICIPANTE,INSCRICAO,ANO
From

(
Select etd.nm_etd PARTICIPANTE,

       pti.nu_pti_icr INSCRICAO,

       to_char(c.dtpag, 'yyyy') ANO,
       to_char(c.dtpag, 'mm') MES, ...

Que deu de errado ?

Comando SQL não encerrado adequadamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

TENTA O CASE

 

 

Select PARTICIPANTE,INSCRICAO,ANO ,
       SUM(CASE WHEM MES =1 THEN VALOR ELSE 0 END) JAN,
       SUM(CASE WHEM MES =2 THEN VALOR ELSE 0 END) FEV,
       ...
       SUM(CASE WHEM MES =12 THEN VALOR ELSE 0 END) DEZ,
From ( Select etd.nm_etd PARTICIPANTE,        
              pti.nu_pti_icr INSCRICAO,        
              to_char(c.dtpag, 'yyyy') ANO,        
              to_char(c.dtpag, 'mm') MES, ...) GROUP BY PARTICIPANTE,INSCRICAO,ANO

Não tenho como testar, pequenos ajustes de síntaxe talvez presicem ser feitos

Compartilhar este post


Link para o post
Compartilhar em outros sites

TENTA O CASE

 

 

Select PARTICIPANTE,INSCRICAO,ANO ,
       SUM(CASE WHEM MES =1 THEN VALOR ELSE 0 END) JAN,
       SUM(CASE WHEM MES =2 THEN VALOR ELSE 0 END) FEV,
       ...
       SUM(CASE WHEM MES =12 THEN VALOR ELSE 0 END) DEZ,
From ( Select etd.nm_etd PARTICIPANTE,        
              pti.nu_pti_icr INSCRICAO,        
              to_char(c.dtpag, 'yyyy') ANO,        
              to_char(c.dtpag, 'mm') MES, ...) GROUP BY PARTICIPANTE,INSCRICAO,ANO

Não tenho como testar, pequenos ajustes de síntaxe talvez presicem ser feitos

 

 

TENTA O CASE

 

 

Select PARTICIPANTE,INSCRICAO,ANO ,
       SUM(CASE WHEM MES =1 THEN VALOR ELSE 0 END) JAN,
       SUM(CASE WHEM MES =2 THEN VALOR ELSE 0 END) FEV,
       ...
       SUM(CASE WHEM MES =12 THEN VALOR ELSE 0 END) DEZ,
From ( Select etd.nm_etd PARTICIPANTE,        
              pti.nu_pti_icr INSCRICAO,        
              to_char(c.dtpag, 'yyyy') ANO,        
              to_char(c.dtpag, 'mm') MES, ...) GROUP BY PARTICIPANTE,INSCRICAO,ANO

Não tenho como testar, pequenos ajustes de síntaxe talvez presicem ser feitos

Motta,

Bom dia!!

 

Fiz da seguinte maneira:

 

 

 

Select   etd.nm_etd PARTICIPANTE, 

         pti.nu_pti_icr INSCRICAO, 
         to_char(c.dtpag, 'yyyy') ANO, 
         to_char(c.dtpag, 'mm') MES,
         sum(det.vrliqpag) VALOR,
sum (case when MES =01 then 'VALOR' else 0 end) JAN,
sum (case when MES =02 then 'VALOR' else 0 end) FEV,
sum (case when MES =03 then 'VALOR' else 0 end) MAR,
sum (case when MES =04 then 'VALOR' else 0 end) ABR,
sum (case when MES =05 then 'VALOR' else 0 end) MAI,
sum (case when MES =06 then 'VALOR' else 0 end) JUN,
sum (case when MES =07 then 'VALOR' else 0 end) JUL,
sum (case when MES =08 then 'VALOR' else 0 end) AGO,
sum (case when MES =09 then 'VALOR' else 0 end) SETe,
sum (case when MES =10 then 'VALOR' else 0 end) OUTu,
sum (case when MES =11 then 'VALOR' else 0 end) NOV,
sum (case when MES =12 then 'VALOR' else 0 end) DEZ
from ( Select etd.nm_etd PARTICIPANTE,        
              pti.nu_pti_icr INSCRICAO,        
              to_char(c.dtpag, 'yyyy') ANO,        
              to_char(c.dtpag, 'mm') MES
        from  fin_lancontaspagar    c,
              fin_lancontaspagardet det,
              etd_elet              etd,
              pti_cad               pti
       where  c.cdeve = '546'
         and  (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
              c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
         and  pti.cd_etd_idt    = etd.cd_etd_idt
         and  c.nrdoc           = det.nrdoc
         and  det.cdfavdvd      = etd.cd_etd_idt
         and  (pti.dt_pti_dlg_mov is null or
              pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
             
     ) 

 

E me deu o seguinte erro que não consigo resolver por nada.
Ora 00904 Detvrliqpag identificador invalido

Compartilhar este post


Link para o post
Compartilhar em outros sites
Select   etd.nm_etd PARTICIPANTE,
         pti.nu_pti_icr INSCRICAO,
         TO_CHAR(C.DTPAG, 'yyyy') ANO,
         sum(det.vrliqpag) VALORtotal,
sum (case when MES =01 then 'VALOR' else 0 end) JAN,
sum (case when MES =02 then 'VALOR' else 0 end) FEV,
sum (case when MES =03 then 'VALOR' else 0 end) MAR,
sum (case when MES =04 then 'VALOR' else 0 end) ABR,
sum (case when MES =05 then 'VALOR' else 0 end) MAI,
sum (case when MES =06 then 'VALOR' else 0 end) JUN,
sum (case when MES =07 then 'VALOR' else 0 end) JUL,
sum (case when MES =08 then 'VALOR' else 0 end) AGO,
sum (case when MES =09 then 'VALOR' else 0 end) SETe,
sum (case when MES =10 then 'VALOR' else 0 end) OUTu,
sum (case when MES =11 then 'VALOR' else 0 end) NOV,
sum (case when MES =12 then 'VALOR' else 0 end) DEZ
from ( Select etd.nm_etd PARTICIPANTE,        
              pti.nu_pti_icr INSCRICAO,        
              to_char(c.dtpag, 'yyyy') ANO,        
              to_char(c.dtpag, 'mm') MES
        from  fin_lancontaspagar    c,
              fin_lancontaspagardet det,
              etd_elet              etd,
              pti_cad               pti
       where  c.cdeve = '546'
         and  (c.dtpag >= to_date('01/01/2013', 'dd/mm/yyyy') and
              c.dtpag <= to_date('31/12/2013', 'dd/mm/yyyy'))
         and  pti.cd_etd_idt    = etd.cd_etd_idt
         and  c.nrdoc           = det.nrdoc
         and  det.cdfavdvd      = etd.cd_etd_idt
         and  (pti.dt_pti_dlg_mov is null or
              pti.dt_pti_dlg_mov > to_date('01/01/2013', 'dd/mm/yyyy'))
             
     )
group by etd.nm_etd ,
         PTI.NU_PTI_ICR ,
         TO_CHAR(C.DTPAG, 'yyyy') 

 

ora00904

 

Em geral informa o número da linha do erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.