Ir para conteúdo

POWERED BY:

Arquivado

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

asacap1000

Somar apenas o mês corrente em um select

Recommended Posts

Bom dia galera.

Estou com um select na qual a consulta é realizada no banco Oracle.

Colocamos o período e o código do cliente. no geral as informações estão vindo ok.

montei um select para trazer o total de cada coluna em valores $$, porém preciso também trazer o total do Mês atual destes campos.

 

Dei uma pesquisada mas não consegui nenhum progresso, se puderem me dar uma força.

Abaixo o select que utilizo para a soma dos valores. e que preciso para o mês corrente também.

select sum(r.vlr_armaz),
       sum(r.vlr_ger_risco),
       sum(r.vlr_movimentacao),
       sum(r.vlr_desunit),
       sum(r.vlr_pesagem),
       sum(r.vlr_averbacao),
       sum(r.vlr_fat_minimo),
       sum(r.vlr_outros_serv),
       sum(r.vlr_tot_nf)

  from (select sum(x.vlr_armaz) vlr_armaz,
               sum(x.vlr_ger_risco) vlr_ger_risco,
               sum(x.vlr_movimentacao) vlr_movimentacao,
               sum(x.vlr_desunit) vlr_desunit,
               sum(x.vlr_pesagem) vlr_pesagem,
               sum(x.vlr_averbacao) vlr_averbacao,
               sum(x.vlr_fat_minimo) vlr_fat_minimo,
               sum(x.vlr_outros_serv) vlr_outros_serv,
               nvl(sum(x.vlr_armaz), 0) + nvl(sum(x.vlr_ger_risco), 0) +
               nvl(sum(x.vlr_movimentacao), 0) + nvl(sum(x.vlr_desunit), 0) +
               nvl(sum(x.vlr_pesagem), 0) + nvl(sum(x.vlr_averbacao), 0) +
               nvl(sum(x.vlr_fat_minimo), 0) +
               nvl(sum(x.vlr_outros_serv), 0) vlr_tot_nf
          from (select bo.lager,
                       bo.id_os,
                       k.id_klient,
                       decode(length(k.suchbegriff),
                              14,
                              substr(k.suchbegriff, 1, 2) || '.' ||
                              substr(k.suchbegriff, 3, 3) || '.' ||
                              substr(k.suchbegriff, 6, 3) || '/' ||
                              substr(k.suchbegriff, 9, 4) || '-' ||
                              substr(k.suchbegriff, 13, 2),
                              substr(k.suchbegriff, 1, 3) || '.' ||
                              substr(k.suchbegriff, 4, 3) || '.' ||
                              substr(k.suchbegriff, 7, 3) || '-' ||
                              substr(k.suchbegriff, 10, 2)) cnpj_cpf,
                       k.name,
                       bi.div_1 lote,
                       bi.div_10 di_dde,
                       bo.nr_nf,
                       bo.date_bill,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and osi.billite in
                               ('01.01', '01.02', '01.03', '01.04', '01.05')) vlr_armaz,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and osi.billite in
                               ('02.01', '02.02', '02.03', '02.04', '02.05')) vlr_ger_risco,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and osi.billite in
                               ('03.01', '03.02', '03.04', '03.05')) vlr_movimentacao,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and osi.billite in ('03.03', '03.11', '03.13')) vlr_desunit,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and osi.billite in
                               ('04.01', '04.02', '04.03', '04.04')) vlr_pesagem,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and osi.billite in ('05.01', '05.02', '05.03')) vlr_averbacao,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.billite in ('06.01')) vlr_fat_minimo,
                       (select sum(round(osi.preis, 2))
                          from bill_os_item osi
                         where osi.lager = bo.lager
                           and osi.id_klient = k.id_klient
                           and osi.id_os = bo.id_os
                           and osi.billite = bi.billite
                           and osi.div_1 = bi.div_1
                           and nvl(osi.div_10, 'x') = nvl(bi.div_10, 'x')
                           and substr(osi.billite, 1, 2) > '07') vlr_outros_serv
                  from bill_os bo, bill_os_item bi, klienten k
                 where bo.lager = bi.lager
                   and bo.id_klient = bi.id_klient
                   and bo.id_os = bi.id_os
                   and bo.lager = k.lager
                   and bo.id_klient = k.id_klient
                   and bo.status = '90'
                   and bo.lager = 'PSI'
                 group by bo.lager,
                          bo.id_os,
                          k.id_klient,
                          decode(length(k.suchbegriff),
                                 14,
                                 substr(k.suchbegriff, 1, 2) || '.' ||
                                 substr(k.suchbegriff, 3, 3) || '.' ||
                                 substr(k.suchbegriff, 6, 3) || '/' ||
                                 substr(k.suchbegriff, 9, 4) || '-' ||
                                 substr(k.suchbegriff, 13, 2),
                                 substr(k.suchbegriff, 1, 3) || '.' ||
                                 substr(k.suchbegriff, 4, 3) || '.' ||
                                 substr(k.suchbegriff, 7, 3) || '-' ||
                                 substr(k.suchbegriff, 10, 2)),
                          k.name,
                          bo.nr_nf,
                          bo.date_bill,
                          bi.billite,
                          bi.div_1,
                          bi.div_10) x,
               (select MAX(d.valor_nf) valor,
                       d.nr_di doc,
                       d.id_klient,
                       d.lager
                  from desmembr d
                 where d.typ_process = 'DINACI'
                 group by d.nr_di, d.id_klient, d.lager
                union
                select dde.preis     valor,
                       dde.nr_dde    doc,
                       dde.id_klient,
                       dde.lager
                  from dde_reg dde) y,
               (select a.valor_cif, a.bruecke_1, a.id_klient, a.lager
                  from anliefpos a) z
         where x.lager = z.lager(+)
           and x.id_klient = z.id_klient(+)
           and x.lote = z.bruecke_1(+)
           and TRIM(x.di_dde) = TRIM(y.doc(+))
           and (x.id_klient like '&cliente')
           and trunc(x.date_bill) between '&inicio' and '&fim'
         group by x.lager,
                  x.id_klient,
                  x.id_os,
                  x.cnpj_cpf,
                  x.name,
                  x.lote,
                  x.di_dde,
                  x.nr_nf,
                  x.date_bill,
                  TO_CHAR(trunc(x.date_bill, 'month')),
                  z.valor_cif,
                  y.valor
         order by x.date_bill, x.id_os, x.di_dde, x.lote) r

Compartilhar este post


Link para o post
Compartilhar em outros sites
preciso também trazer o total do Mês atual destes campos.

 

 

1) Ao menos para mim não ficou claro, não basta fazer esta seleção no "where" ?

 

2) Também algo como

...
sum(valor) valor,
sum(case whem to_char(data_venda,'yyyymm') = to_char(sysdate,'yyyymm') 
                   then valor else 0 end),
...

pode ser feito para separar somente um mês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

1) Ao menos para mim não ficou claro, não basta fazer esta seleção no "where" ?

 

2) Também algo como

...
sum(valor) valor,
sum(case whem to_char(data_venda,'yyyymm') = to_char(sysdate,'yyyymm') 
                   then valor else 0 end),
...

pode ser feito para separar somente um mês.

Então neste caso o relatório ele me traz as duas linhas, por exemplo gero um relatório por período ex: 01/09/2014 até 28/10/2014, em uma das linhas ele soma todo o período e me mostra Total do Cliente na outra ele soma apenas Total do Mês

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.