- Este tópico contém 6 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por
ericclauber.
-
AutorPosts
-
29 de março de 2010 às 9:30 pm #93396
ericclauber
ParticipanteBoa tarde pessoal… estou precisando de ajuda.
Estou fazendo um relatório de comissões, sendo que devera ser de mes a mes. Por exemplo.
janeiro | fevereiro | março
valor | valor | valorPergunto como faço para colacar esses totais por mes.
Grato pelo ajuda!!!
29 de março de 2010 às 9:59 pm #93402Regis Araujo
ParticipanteOpa..!
Use o “CASE”.. creio que irá te ajudar..!!
Ex:.
select
sum("case" when MES = 1 then valor else 0 end) JANEIRO,
sum("case" when MES = 2 then valor else 0 end) FEVEREIRO,
sum("case" when MES = 3 then valor else 0 end) MARCO
FROM (SELECT 1 "MES", 4 "VALOR" FROM DUAL
"UNION ALL"
SELECT 1 "MES", 4 "VALOR" FROM DUAL
"UNION ALL"
SELECT 2 "MES", 4 "VALOR" FROM DUAL
"UNION ALL"
SELECT 3 "MES", 4 "VALOR" FROM DUAL);
Basta vc substituir o numeral do mes pelo nome do mes e assim por adiante..!!Vc pode fazer um group by, mas ira aparecer linear.. e não colunar…
select mes, sum(valor) from tabela
group by mes;
Abraços.. espero ajude..
29 de março de 2010 às 10:06 pm #93404Regis Araujo
ParticipantePutz..
Tem algum bug.. se eu deixo o “CASE” e o “UNION ALL” sem as “” ele não manda a mensagem..!
Bom.. basta retirar as “” para rodar o comando..!!!!
Abraços..!!!
29 de março de 2010 às 11:27 pm #93413ericclauber
ParticipanteOpa Thunder_Catz, tudo bem. Este select abaixo. me fornece o resultado do mes se eu especificar o periodo no where ou no meu filtro do relatorio, resultando em somente uma soma total e nao mes a mes. E consigo ter o resultado da soma da coluna (valor), so que é conforme eu especifico o periodo. Entao em cima deste select abaixo, preciso ter o resultato do mes a mes. Para que quando eu especifique os ultimos 12 meses por exemplo. Ele me traga a cada mes. Veja exemplo abaixo. Agradeço
***** Este exemplo é com deveria ficar. *****
COD……….FORNECEDOR……………………………..Vl_mes1 – Vl_mes2…
1912…AGROBASAS/A-FORTALEZA…………………….0,62……….2,22
1087…ALCOOL SANTA CRUZ LTDA…………………….9,80……….32,00
873…..AMAFIL IND.E COM.DE ALIMENTOS LTDA……0,46……….6,25
1494…ANDIJU ALIMENTOS LTDA0………………………0,59………5,00
1040…ANGELO AURICCHIO & CIA LTDA. OLE……….2,23………13,25
1624…ARCOR DO BRASIL LTDA…………………………7,91………4,89
………………………………………………….TOTAIS….. SOMA…….SOMA…****Neste select consigo obter somente uma coluna do valor, sendo somada em 1 resultado.***** Mas ate aqui esta correto.
SELECT pcmov.codfornec, pcfornec.fornecedor,pcmov.codusur, pcusuari.nome,
ROUND(SUM (((pcmov.punitcont * pcmov.percom / 100) * pcmov.qtcont)),2) valor
FROM pcusuari, pcfornec, pcmov
WHERE pcmov.codfornec = pcfornec.codfornec
AND pcmov.codusur = pcusuari.codusur
AND pcmov.codoper = ‘S’
GROUP BY pcmov.codfornec, pcfornec.fornecedor,pcmov.codusur, pcusuari.nome
ORDER BY valor desc30 de março de 2010 às 12:07 am #93416Leonardo Litz
ParticipanteVocê pode utilizar a função CUBE:
tente assim:
SELECT pcmov.codfornec, pcfornec.fornecedor,pcmov.codusur, pcusuari.nome,
ROUND(SUM (((pcmov.punitcont * pcmov.percom / 100) * pcmov.qtcont)),2) valor
FROM pcusuari, pcfornec, pcmov
WHERE pcmov.codfornec = pcfornec.codfornec
AND pcmov.codusur = pcusuari.codusur
AND pcmov.codoper = 'S'
GROUP BY CUBE(pcmov.codfornec, pcfornec.fornecedor,pcmov.codusur, pcusuari.nome)
ORDER BY valor desc
VLW Leonardo Litz!
30 de março de 2010 às 12:45 am #93420burga
ParticipanteSeguindo a lógica do Thunder e já transformando meses em colunas, você pode fazer o seguinte:
with t1 as
(select 1 pessoa, 1 comissao, sysdate + 30 data from dual
union all
select 1, 2, sysdate from dual
union all
select 2, 2, sysdate - 45 from dual
union all
select 2, 2, sysdate - 80 from dual
union all
select 2, 2, sysdate + 60 from dual
union all
select 1, 2, sysdate + 30 from dual)
select pessoa,
sum(mes1),
sum(mes2),
sum(mes3),
sum(mes4),
sum(mes5),
sum(mes6),
sum(mes7),
sum(mes8),
sum(mes9),
sum(mes10),
sum(mes11),
sum(mes12)
from
(select pessoa,
case when to_char(data,'MM') = 01 then comissao else 0 end mes1,
case when to_char(data,'MM') = 02 then comissao else 0 end mes2,
case when to_char(data,'MM') = 03 then comissao else 0 end mes3,
case when to_char(data,'MM') = 04 then comissao else 0 end mes4,
case when to_char(data,'MM') = 05 then comissao else 0 end mes5,
case when to_char(data,'MM') = 06 then comissao else 0 end mes6,
case when to_char(data,'MM') = 07 then comissao else 0 end mes7,
case when to_char(data,'MM') = 08 then comissao else 0 end mes8,
case when to_char(data,'MM') = 09 then comissao else 0 end mes9,
case when to_char(data,'MM') = 10 then comissao else 0 end mes10,
case when to_char(data,'MM') = 11 then comissao else 0 end mes11,
case when to_char(data,'MM') = 12 then comissao else 0 end mes12
from t1)
group by pessoa;Isso considerando que existe um campo data na tabela pra você poder separar mês a mês.
30 de março de 2010 às 4:59 pm #93430ericclauber
Participantesó um OBS: não preciso do resultado das somas das colunas, este faço pelo leyout do relatório. Só preciso dos valosres mes a mes.
Até aqui valeu pela ajuda pessoal…
-
AutorPosts
- Você deve fazer login para responder a este tópico.