How to add multiple decodes on the same line?

1

I need to group the decode fields in a same line some hint

follows SQL

SELECT DISTINCT

   iTG.GUI_NUMERO " NUMERO GUIA ",

DECODE(itg.pro_tipo_procedimento,'MAT',
   sum(NVL(itg.GUI_VALOR_PAGO_CUS,0)) + sum(NVL(itg.GUI_VALOR_PAGO_FIL,0)) + sum(NVL(itg.GUI_VALOR_PAGO_SER,0)), NULL) MAT,
DECODE(itg.pro_tipo_procedimento,'TMA',
   sum(NVL(itg.GUI_VALOR_PAGO_CUS,0)) + sum(NVL(itg.GUI_VALOR_PAGO_FIL,0)) + sum(NVL(itg.GUI_VALOR_PAGO_SER,0)), NULL) TMA,
DECODE(itg.pro_tipo_procedimento,'HOS',
   sum(NVL(itg.GUI_VALOR_PAGO_CUS,0)) + sum(NVL(itg.GUI_VALOR_PAGO_FIL,0)) + sum(NVL(itg.GUI_VALOR_PAGO_SER,0)), NULL) HOS,
DECODE(itg.pro_tipo_procedimento,'TME',
   sum(NVL(itg.GUI_VALOR_PAGO_CUS,0)) + sum(NVL(itg.GUI_VALOR_PAGO_FIL,0)) + sum(NVL(itg.GUI_VALOR_PAGO_SER,0)), NULL) TME,
DECODE(itg.pro_tipo_procedimento,'MED',
   sum(NVL(itg.GUI_VALOR_PAGO_CUS,0)) + sum(NVL(itg.GUI_VALOR_PAGO_FIL,0)) + sum(NVL(itg.GUI_VALOR_PAGO_SER,0)), NULL) MED

FROM
     unimed.item_guia itg
WHERE
      --Itg.GUI_PAGTO = 'S'
  Itg.GUI_STATUS = 'N'
  AND Itg.GUI_SITUACAO = 'AP'
  and itg.pro_tipo_procedimento in ('MAT','MED','HOS','TME','TMA')
  and itg.gui_numero in (69940371)
GROUP BY 
    iTG.GUI_NUMERO, 
    itg.pro_tipo_procedimento;

    
asked by anonymous 06.10.2016 / 20:43

2 answers

1

Try.

SELECT iTG.GUI_NUMERO, 

       itg.pro_tipo_procedimento,

sum(case when itg.pro_tipo_procedimento='MAT' 
         then NVL(itg.GUI_VALOR_PAGO_CUS,0) +  NVL(itg.GUI_VALOR_PAGO_FIL,0) NVL(itg.GUI_VALOR_PAGO_SER,0))
         else 0 end) mat, 

sum(case when itg.pro_tipo_procedimento='TMA' 
         then NVL(itg.GUI_VALOR_PAGO_CUS,0) +  NVL(itg.GUI_VALOR_PAGO_FIL,0) NVL(itg.GUI_VALOR_PAGO_SER,0))
         else 0 end) TMA

sum(case when itg.pro_tipo_procedimento='HOS' 
         then NVL(itg.GUI_VALOR_PAGO_CUS,0) +  NVL(itg.GUI_VALOR_PAGO_FIL,0) NVL(itg.GUI_VALOR_PAGO_SER,0))
         else 0 end) HOS

sum(case when itg.pro_tipo_procedimento='TME' 
         then NVL(itg.GUI_VALOR_PAGO_CUS,0) +  NVL(itg.GUI_VALOR_PAGO_FIL,0) NVL(itg.GUI_VALOR_PAGO_SER,0))
         else 0 end) TME,

sum(case when itg.pro_tipo_procedimento='MED' 
         then NVL(itg.GUI_VALOR_PAGO_CUS,0) +  NVL(itg.GUI_VALOR_PAGO_FIL,0) NVL(itg.GUI_VALOR_PAGO_SER,0))
         else 0 end) MED


FROM
     unimed.item_guia itg
WHERE
      --Itg.GUI_PAGTO = 'S'
  Itg.GUI_STATUS = 'N'
  AND Itg.GUI_SITUACAO = 'AP'
  and itg.pro_tipo_procedimento in ('MAT','MED','HOS','TME','TMA')
  and itg.gui_numero in (69940371)
GROUP BY 
    iTG.GUI_NUMERO, 
    itg.pro_tipo_procedimento;

It may have some syntax error because I can not test

    
07.10.2016 / 00:00
0

Run the query below:

   select 
       numero_guia, 
       sum(mat) mat, 
       sum(tma) tma, 
       sum(hos) hos, 
       sum(tme) tme, 
       sum(med) med 
    from (
        select itg.gui_numero numero_guia, 
           sum(case when itg.pro_tipo_procedimento = 'MAT' 
               then itg.gui_valor_pago_cus + 
                    itg.gui_valor_pago_fil + 
                    itg.gui_valor_pago_ser 
                    else 0                          end ) mat,
           sum(case when itg.pro_tipo_procedimento = 'TMA' 
                    then itg.gui_valor_pago_cus + 
                    itg.gui_valor_pago_fil + 
                    itg.gui_valor_pago_ser 
                    else 0                          end) tma,
           sum(case when itg.pro_tipo_procedimento = 'HOS' 
                    then itg.gui_valor_pago_cus + 
                         itg.gui_valor_pago_fil + 
                         itg.gui_valor_pago_ser 
                    else 0                          end) hos,
            sum(case when itg.pro_tipo_procedimento = 'TME' 
                     then itg.gui_valor_pago_cus +
                          itg.gui_valor_pago_fil +
                          itg.gui_valor_pago_ser 
                     else 0                         end) tme,
            sum(case when itg.pro_tipo_procedimento = 'MED' 
                     then itg.gui_valor_pago_cus +
                          itg.gui_valor_pago_fil + 
                          itg.gui_valor_pago_ser 
                     else 0                         end) med
       FROM  item_guia itg
       WHERE Itg.GUI_STATUS             = 'N'
         AND Itg.GUI_SITUACAO           = 'AP'
         AND itg.pro_tipo_procedimento IN ('MAT','MED','HOS','TME','TMA')
         AND itg.gui_numero            IN (69940371)
GROUP BY iTG.GUI_NUMERO,
  itg.pro_tipo_procedimento
) resultado
group by numero_guia;


The expected result will be equal to:

    
13.10.2016 / 03:16