Dúvida Com Select

Firebird

26/12/2004

No select que tenho abaixo eu seleciono a quantidade de produtos vendido somo e as agrupo por descrição.
Na tabela detalhe_vendas tenho os itens que foram vendidos, e na tabela resumo_vendas tenho os dados da venda como número data etc..
elas se relacionam pelo campo num_resumo.


select produtos.descricao,sum(detalhe_vendas.valor_total)
from detalhe_vendas,produtos,resumo_vendas
where produtos.cod_barras=detalhe_vendas.cod_produto and
detalhe_vendas.num_resumo=resumo_vendas.num_resumo
group by produtos.descricao



Gostaria de selecionar os itens da tabela detalhe_vendas quando a data de venda na tabela resumo_vendas estiver entre o periodo solicitado.

Meu campo data é do tipo timestamp

Tentei fazer a select do jeito abaixo e não deu certo:


select produtos.descricao,sum(detalhe_vendas.valor_total), cast(resumo_vendas.data_hora as date)
from detalhe_vendas,produtos,resumo_vendas
where produtos.cod_barras=detalhe_vendas.cod_produto and
detalhe_vendas.num_resumo=resumo_vendas.num_resumo and cast(resumo_vendas.data_hora as date)between ´10/11/2004´ and ´10/11/2004´
group by produtos.descricao



quando faço isso me da o seguinte erro:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)


Se alguem puder me ajudar eu agradeço


Obrigado


Gameiro

Gameiro

Curtidas 0

Respostas

Gameiro

Gameiro

26/12/2004

Pessoal consegui resolver em partes com o select abaixo:

select cast(resumo_vendas.data_hora as date) ,produtos.descricao,sum(detalhe_vendas.valor_total)
from detalhe_vendas,produtos,resumo_vendas
where produtos.cod_barras=detalhe_vendas.cod_produto and
detalhe_vendas.num_resumo=resumo_vendas.num_resumo and cast(resumo_vendas.data_hora as date)between ´12/23/2004´ and ´12/24/2004´
group by 1,2



Só que ele so usasse a data para selecionar e que agrupasse por produto.descricao.


Se eu tiro algum do agrupamentos acima da erro:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)

Obrigado


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/12/2004

a instrução:

select produtos.descricao,
cast(resumo_vendas.data_hora as date),
sum(detalhe_vendas.valor_total)
from detalhe_vendas, produtos, resumo_vendas
where produtos.cod_barras=detalhe_vendas.cod_produto
and detalhe_vendas.num_resumo=resumo_vendas.num_resumo
and resumo_vendas.data_hora between ´23.12.2004´ and ´24.12.2004´
group by produtos.descricao

deveria funcionar normalmente, a não ser que o campo descrição seja do tipo BLOB. se for, tente agrupar pelo código do produto:

select max(produtos.descricao),
cast(resumo_vendas.data_hora as date), // pq o cast?
sum(detalhe_vendas.valor_total)
from detalhe_vendas, produtos, resumo_vendas
where produtos.cod_barras=detalhe_vendas.cod_produto
and detalhe_vendas.num_resumo=resumo_vendas.num_resumo
and resumo_vendas.data_hora between ´23.12.2004´ and ´24.12.2004´
group by produtos.cod_barras


GOSTEI 0
Gameiro

Gameiro

26/12/2004

Obrigado Emerson, consegui resolver, como não preciso exibir a data eu tirei ele do select deixei só no between ai funciono, e o cast eu vi aqui no forum que é o jeito certo de trabalhar com campos timestamp quando se quer pegar a data.





Valeu e até mais.


GOSTEI 0
POSTAR