[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 235
  • Last Modified:

group by Union

how can I do to use the group by with union and calculate the correct values ¿¿my query is this:

SELECT
                              estoque_produto.grupo, estoque_produto.fracionado,
                              sum(estoque_produto.preco_custo) as preco_custo, sum(estoque_produto.preco_unitario) as preco_unitario,
                              sum(estoque_produto.preco_unit_fracionado) as preco_unit_fracionado,
                              sum(estoque_produto.preco_unitario_custo) as preco_unitario_custo,
                              sum(estoque_produto.fracionado_inicial) as fracionado_inicial,
                              sum(estoque_produto.preco_unitario_fracionado_custo) as preco_unitario_fracionado_custo,
                              estoque_pacote_full.produto, sum(estoque_pacote_full.qtd) as qtd_saida
                              FROM
                              estoque_produto INNER JOIN
                              estoque_pacote_full ON estoque_pacote_full.id_produto =
                              estoque_produto.Id INNER JOIN
                              estoque_saida_pacote ON estoque_pacote_full.id_pacote =
                              estoque_saida_pacote.id_pacote        
                              WHERE MONTH(estoque_saida_pacote.data_saida) = '09' and YEAR(estoque_saida_pacote.data_saida) = '2011'
                              GROUP by estoque_produto.grupo
                        
                        union
                        
                        SELECT
                              estoque_produto.grupo, estoque_produto.fracionado,
                              sum(estoque_produto.preco_custo) as preco_custo, sum(estoque_produto.preco_unitario) as preco_unitario,
                              sum(estoque_produto.preco_unit_fracionado) as preco_unit_fracionado,                    
                              sum(estoque_produto.preco_unitario_custo) as preco_unitario_custo,
                              sum(estoque_produto.fracionado_inicial) as fracionado_inicial,                    
                              sum(estoque_produto.preco_unitario_fracionado_custo) as preco_unitario_fracionado_custo,
                              estoque_saida.produto, sum(estoque_saida.qtd_saida) as qtd_saida
                              FROM
                              estoque_produto INNER JOIN
                              estoque_saida ON estoque_saida.id_produto = estoque_produto.Id  
                              WHERE MONTH(estoque_saida.data_saida) = '09' and YEAR(estoque_saida.data_saida) = '2011'
                              GROUP by estoque_produto.grupo



I have several but I want to group results by adding the result of a select with the select and group 2 because the field is common to all group
0
eduardo12fox
Asked:
eduardo12fox
1 Solution
 
johanntagleCommented:
Put the union query to a subquery then do your sum in the outer query.  Try:

select a.grupo, a.fracionado,
                              sum(a.preco_custo), sum(a.preco_unitario),
                              sum(a.preco_unit_fracionado),
                              sum(a.preco_unitario_custo),
                              sum(a.fracionado_inicial),
                              sum(a.preco_unitario_fracionado_custo),
                              a.produto, sum(a.qtd_saida)
from (SELECT
                              estoque_produto.grupo, estoque_produto.fracionado,
                              estoque_produto.preco_custo, estoque_produto.preco_unitario,
                              estoque_produto.preco_unit_fracionado,
                              estoque_produto.preco_unitario_custo,
                              estoque_produto.fracionado_inicial,
                              estoque_produto.preco_unitario_fracionado_custo,
                              estoque_pacote_full.produto, estoque_pacote_full.qtd as qtd_saida
                              FROM
                              estoque_produto INNER JOIN
                              estoque_pacote_full ON estoque_pacote_full.id_produto =
                              estoque_produto.Id INNER JOIN
                              estoque_saida_pacote ON estoque_pacote_full.id_pacote =
                              estoque_saida_pacote.id_pacote        
                              WHERE MONTH(estoque_saida_pacote.data_saida) = '09' and YEAR(estoque_saida_pacote.data_saida) = '2011'
                        union
                        SELECT
                              estoque_produto.grupo, estoque_produto.fracionado,
                              estoque_produto.preco_custo, estoque_produto.preco_unitario,
                              estoque_produto.preco_unit_fracionado,
                              estoque_produto.preco_unitario_custo,
                              estoque_produto.fracionado_inicial,
                              estoque_produto.preco_unitario_fracionado_custo,
                              estoque_pacote_full.produto, estoque_pacote_full.qtd as qtd_saida
                              FROM
                              estoque_produto INNER JOIN
                              estoque_saida ON estoque_saida.id_produto = estoque_produto.Id  
                              WHERE MONTH(estoque_saida.data_saida) = '09' and YEAR(estoque_saida.data_saida) = '2011'
) a
GROUP by a.grupo, a.fracionado, a.produto

Notes:
1.  Untested
2.  You should group by all the other columns that are not being summed up, that's why I put  a.grupo, a.fracionado, a.produto
0
 
eduardo12foxAuthor Commented:
Very good thank you!!
0

Featured Post

Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now