Jump to content
Sign in to follow this  
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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.