Pular para o conteúdo

Fóruns SQL e PL/SQL Resultado mensal Resultado mensal

#93420
burga
Participante

    Seguindo 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.