Perform an overall sum with all fields

1

I have the following tables: tb_product, tb_movement

COD_PROD  | DESCRICAO | TIPO     | 
|01       | CEBOLA    | ALIMENTO |
|02       | ARROZ     | ALIMENTO |
|03       | CARNE     | ALIMENTO |
|04       | COCA-COLA | BEBIDA   |
|05       | PINGA     | BEBIDA   |

COD_MOV | COD_PROD | QUANT.| 
|01     |  01      | 5     |
|02     |  05      | 8     |
|03     |  02      | 10    |
|04     |  05      | 4     |
|05     |  03      | 1     |

sql

 select 
  CASE WHEN tb_produto.tipo = 'ALIMENTO' THEN
    sum(tb_movimento.QUANT*1)
  ELSE
    SUM(tb_movimento.QUANT*2)
  END
 from tb_movimento, tb_produto
 where (tb_produto.cod_prod = tb_movimento.cod_prod)
 group by tb_produto.tipo

My return:

|CASE|
|16  |
|24  |

In my case I would like it to return me:

|CASE|
|40  |
    
asked by anonymous 10.11.2016 / 12:47

2 answers

2

Since you have two types of products and the select is grouping by type it is natural for the product to display the result in this way.

  

I do not have FIREBIRD to test and I am posting a tested response   in Oracle, as far as I remember, it works on your bank without any problems.

     

If you have problems at your bank post here we have corrected.

Do this:

select sum( total ) from (  
 select 
  CASE WHEN tb_produto.tipo = 'ALIMENTO' THEN
    sum(tb_movimento.QUANT*1)
  ELSE
    SUM(tb_movimento.QUANT*2)
  END as total
 from tb_movimento, tb_produto
 where (tb_produto.cod_prod = tb_movimento.cod_prod)
 group by tb_produto.tipo ) a
    
10.11.2016 / 14:23
0

Do this:

select sum(tb_movimento.QUANT * (case when tb_produto.tipo='ALIMENTO' then 1 else 2 end)) from tb_movimento inner join tb_produto on tb_produto.cod_prod = tb_movimento.cod_prod

Improvement: Case used to set the multiplication factor.

    
17.11.2016 / 20:33