Calculate total amount and total SQL Server value with three tables

Asked

Viewed 865 times

0

Sds, I have a problem, I am not able to group the municipalities in my SELECT. Even with the group by the municipalities are separated. There are three different tables, municipality, product and unit. need to calculate total quantity and total value of 'Omeprazol 10mg' per municipality.

SELECT ( dbo.tb_municipio.des_municipio ), 
       Sum(dbo.tb_produto.qtd_produto)                             AS TOTAL_SOMA 
       , 
       ( dbo.tb_produto.val_produto * dbo.tb_produto.qtd_produto ) AS 
       TOTAL_VALOR 
FROM   dbo.tb_municipio 
       INNER JOIN dbo.tb_unidade 
               ON dbo.tb_municipio.cod_municipio = dbo.tb_unidade.cod_municipio 
       INNER JOIN dbo.tb_produto 
               ON dbo.tb_unidade.cod_unidade = dbo.tb_produto.cod_unidade 
WHERE  des_produto = 'Omeprazol 10mg' 
GROUP  BY dbo.tb_municipio.des_municipio, 
          dbo.tb_produto.qtd_produto, 
          dbo.tb_produto.val_produto 

this is the result that is giving, my goal is that it is all grouped, all salvador products in a single line.

des_muni  Total Soma  Total Valor
Salvador   80         25.60
Salvador   100        32.00
Salvador   5000       1600.00
SãoPaulo   30         15.00

If any information is missing, put in sequence

2 answers

0

This happens because the GROUP BY groups the equal fields, and in your case the totals are not. When we use stapling functions ( SUM, COUNT, etc), these do not need to be in the GROUP BY, only the other fields of SELECT.

The dbo.tb_produto.qtd_produto is already being computed with the function SUM, so you don’t have to be in GROUP BY. Now to group everything, you need to use a function you called "TOTAL_VALOR", otherwise you will not group. Try to use SUM(dbo.tb_produto.val_produto * dbo.tb_produto.qtd_produto) and remove that field as well from GROUP BY, leaving only dbo.tb_municipio.des_municipio.

  • Thank you so much for your help!

0


To group everything, you need to do two things in this query:

Use the SUM also in the calculation of TOTAL_VALOR:

SUM( dbo.tb_produto.val_produto * dbo.tb_produto.qtd_produto ) AS TOTAL_VALOR

And leave in group by, only the dbo.tb_municipio.des_municipio:

GROUP  BY dbo.tb_municipio.des_municipio

Your query would then look like this:

SELECT dbo.tb_municipio.des_municipio , 
       Sum(dbo.tb_produto.qtd_produto) AS TOTAL_SOMA ,
       Sum( dbo.tb_produto.val_produto * dbo.tb_produto.qtd_produto ) AS TOTAL_VALOR 
 FROM  dbo.tb_municipio 
       INNER JOIN dbo.tb_unidade 
               ON dbo.tb_municipio.cod_municipio = dbo.tb_unidade.cod_municipio 
       INNER JOIN dbo.tb_produto 
               ON dbo.tb_unidade.cod_unidade = dbo.tb_produto.cod_unidade 
 WHERE des_produto = 'Omeprazol 10mg' 
 GROUP BY dbo.tb_municipio.des_municipio
  • Thank you so much for your help! you and the above colleague saved me, that little detail was killing me rs

Browser other questions tagged

You are not signed in. Login or sign up in order to post.