Totais de produtos vendidos por grupo

Firebird

31/08/2011

Galera eu estou precisando saber os totais de produtos vendidos por grupo, ou seja, somar todos os produtos vendidos de um derterminado grupo.
Ex: GRUPO        |   QTDE VENDIDA
      Grupo 01                  200
      Grupo 02                  100
      Grupo 03                  130
etc...


As tabelas envolvidas são essas:

CREATE TABLE PRODUTOS (
    PROD_ID                  INTEGER NOT NULL PRIMARY KEY,
    PROD_CODBARRAS           VARCHAR(15),
    PROD_DESCRICAO           VARCHAR(50) COLLATE PT_BR,
    GRUPO_ID                 INTEGER
);

CREATE TABLE GRUPO_PROD (
    GRUPO_ID         INTEGER NOT NULL,
    GRUPO_DESCRICAO  VARCHAR(30) COLLATE PT_BR
);

CREATE TABLE CX_ITENS (
    CXVEN_ID        DM_PK /* DM_PK = INTEGER NOT NULL */,
    PROD_ID         DM_PK /* DM_PK = INTEGER NOT NULL */,
    PROD_DESCRICAO  DM_NOME /* DM_NOME = VARCHAR(50) */,
    PROD_PRECO      DM_VALOR /* DM_VALOR = NUMERIC(15,2) */,
    PROD_TOTAL      DM_VALOR /* DM_VALOR = NUMERIC(15,2) */,
    VEN_QTDE        DM_QTDE /* DM_QTDE = NUMERIC(5,3) */,
    VEND_ID         DM_FK /* DM_FK = INTEGER */,
    DATA            DM_DATA /* DM_DATA = DATE */
);

O Select que tentei fazer foi esse, mas não deu certo.

select
    cx_itens.prod_id,
    cx_itens.prod_descricao,
    sum(coalesce(cx_itens.ven_qtde,0)),
    grupo_prod.grupo_descricao
from grupo_prod
   inner join produtos on (grupo_prod.grupo_id = produtos.grupo_id)
   inner join cx_itens on (produtos.prod_id = cx_itens.prod_id)
where
  cx_itens.data between '01.01.2011' and '29.01.2011'
group by
    cx_itens.prod_id,
    cx_itens.prod_descricao,
    grupo_prod.grupo_descricao
order by
 4,1


Alguém pode ajudar?
Sidney Abreu

Sidney Abreu

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

31/08/2011

sua instrução está quase certa.

o problema é que, se você quer mostrar o total por grupos, você não poderá exibir outros dados, como id e/ou descricao do produto.

com isso, sua instrução deverá ser:

select
  grupo_prod.grupo_id Grupo
  grupo_prod.grupo_descricao Descricao,
  coalesce(sum(cx_itens.ven_qtde),0) QtdVendida
from
  cx_itens
inner join
  produtos on (produtos.prod_id = cx_itens.prod_id)
inner join
  grupo_prod on (grupo_prod.grupo_id = produtos.grupo_id)
where
  cx_itens.data between '01.01.2011' and '29.01.2011'
group by
  grupo_prod.grupo_id, grupo_prod.grupo_descricao
order by
  grupo_prod.grupo_descricao


GOSTEI 0
Otavio Pimenta

Otavio Pimenta

31/08/2011

Só uma dica sidney, como boas praticas evite usar order by pelos indices da declaração, se por ventura alguem mudar a ordem dos campos por algum motivo, dependendo da instruçao SQL, voce pode ter pequenos problemas. só uma dica, Blz
GOSTEI 0
POSTAR