thiagotsp 0 Denunciar post Postado Maio 20, 2013 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
Motta 645 Denunciar post Postado Maio 20, 2013 Use PIVOT ou CASE. Compartilhar este post Link para o post Compartilhar em outros sites
thiagotsp 0 Denunciar post Postado Maio 20, 2013 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
Motta 645 Denunciar post Postado Maio 20, 2013 Nos links tem. Compartilhar este post Link para o post Compartilhar em outros sites
thiagotsp 0 Denunciar post Postado Maio 20, 2013 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
Motta 645 Denunciar post Postado Maio 21, 2013 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
thiagotsp 0 Denunciar post Postado Maio 21, 2013 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
Motta 645 Denunciar post Postado Maio 21, 2013 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
thiagotsp 0 Denunciar post Postado Maio 21, 2013 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
Motta 645 Denunciar post Postado Maio 21, 2013 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
thiagotsp 0 Denunciar post Postado Maio 22, 2013 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
Motta 645 Denunciar post Postado Maio 22, 2013 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