Totais de produtos vendidos por grupo
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?
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
Curtidas 0
Respostas
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
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
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