Dúvidas com SQl e firebird

06/08/2019

7

Bom dia a todos, tenho uma consulta em SQl , usando a ferramenta IBExpert, meu banco é firebird.

Segue:
select distinct IA.DESCRICAO,
count(VI.QUANTIDADE) as QTDE,
sum(I.VALOR_TOTAL) as Total
from
venda_ingresso VI
inner join ingresso as I
on VI.ID_VENDA_INGRESSO = I.id
inner join ingresso_atracoes as IA
on VI.id_atracoes = IA.id
WHERE 1=1
and I.DATA_VISITA BETWEEN '02.01.2019' AND '05.08.2019'
group by IA.DESCRICAO, VI.QUANTIDADE, I.VALOR_TOTAL
order by IA.DESCRICAO, VI.QUANTIDADE, I.VALOR_TOTAL

Só que sempre retorna varias linhas da mesma descrição, e não quero eu quero agrupar, por exemplo:

Descricao quantidade total
xyz 500 250,00
xyz2 600 360,00

etc..

Sempre esta retornando linha a linha, e isso eu não quero, preciso dessa forma que está ai em cima.

Alguém sabe como resolver isso? Obrigado a todos e todas.
Responder

Post mais votado

06/08/2019

Olá Fernando Wahl,

Está retornando várias linhas, pois provavelmente você possui descrições diferentes para cada registro, verifique se não é esta questão ok.


Um abraço,
ITO


Exemplo:

select count(VI.QUANTIDADE) as QTDE,
sum(I.VALOR_TOTAL) as Total
from
venda_ingresso VI
inner join ingresso as I
on VI.ID_VENDA_INGRESSO = I.id
inner join ingresso_atracoes as IA
on VI.id_atracoes = IA.id
WHERE 1=1
and I.DATA_VISITA BETWEEN '02.01.2019' AND '05.08.2019'

neste exemplo irá retornar apenas uma linha, você só consegue agrupar itens iguais, a grosso modo: banana com banana e abacaxi com abacaxi.


Entendo amigo, agradeço novamente, realmente dessa forma agrupo, ja tinha feito assim, mas preciso da descrição entende, preciso da descrição, a quantidade de ingressos vendidos para essa descrição e o valor arrecadado no período escolhido pelo usuário.
É nisso que estou me batendo um pouco.

Agradeço novamente.


Verifica se a tabela filha não possui chave composta.
Responder

Mais Posts

06/08/2019

Fernando Ito

Olá Fernando Wahl,

Está retornando várias linhas, pois provavelmente você possui descrições diferentes para cada registro, verifique se não é esta questão ok.


Um abraço,
ITO
Responder

06/08/2019

Fernando Wahl

Opa, bom dia, obrigado pela resposta em momento record, mas infelizmente não é isso você falou.
Verifiquei todas as possibilidades.
Estou vindo de um mundo do SQL Server, onde tudo é possível, kkk.

Se souber de mais alguma coisa eu agradeço.
Responder

06/08/2019

Fernando Ito

Olá Fernando Wahl,

Está retornando várias linhas, pois provavelmente você possui descrições diferentes para cada registro, verifique se não é esta questão ok.


Um abraço,
ITO


Exemplo:

select count(VI.QUANTIDADE) as QTDE,
sum(I.VALOR_TOTAL) as Total
from
venda_ingresso VI
inner join ingresso as I
on VI.ID_VENDA_INGRESSO = I.id
inner join ingresso_atracoes as IA
on VI.id_atracoes = IA.id
WHERE 1=1
and I.DATA_VISITA BETWEEN '02.01.2019' AND '05.08.2019'

neste exemplo irá retornar apenas uma linha, você só consegue agrupar itens iguais, a grosso modo: banana com banana e abacaxi com abacaxi.
Responder

06/08/2019

Fernando Wahl

Olá Fernando Wahl,

Está retornando várias linhas, pois provavelmente você possui descrições diferentes para cada registro, verifique se não é esta questão ok.


Um abraço,
ITO


Exemplo:

select count(VI.QUANTIDADE) as QTDE,
sum(I.VALOR_TOTAL) as Total
from
venda_ingresso VI
inner join ingresso as I
on VI.ID_VENDA_INGRESSO = I.id
inner join ingresso_atracoes as IA
on VI.id_atracoes = IA.id
WHERE 1=1
and I.DATA_VISITA BETWEEN '02.01.2019' AND '05.08.2019'

neste exemplo irá retornar apenas uma linha, você só consegue agrupar itens iguais, a grosso modo: banana com banana e abacaxi com abacaxi.


Entendo amigo, agradeço novamente, realmente dessa forma agrupo, ja tinha feito assim, mas preciso da descrição entende, preciso da descrição, a quantidade de ingressos vendidos para essa descrição e o valor arrecadado no período escolhido pelo usuário.
É nisso que estou me batendo um pouco.

Agradeço novamente.
Responder

06/08/2019

Fernando Ito

Olá Fernando Wahl,

Está retornando várias linhas, pois provavelmente você possui descrições diferentes para cada registro, verifique se não é esta questão ok.


Um abraço,
ITO


Exemplo:

select count(VI.QUANTIDADE) as QTDE,
sum(I.VALOR_TOTAL) as Total
from
venda_ingresso VI
inner join ingresso as I
on VI.ID_VENDA_INGRESSO = I.id
inner join ingresso_atracoes as IA
on VI.id_atracoes = IA.id
WHERE 1=1
and I.DATA_VISITA BETWEEN '02.01.2019' AND '05.08.2019'

neste exemplo irá retornar apenas uma linha, você só consegue agrupar itens iguais, a grosso modo: banana com banana e abacaxi com abacaxi.


Entendo amigo, agradeço novamente, realmente dessa forma agrupo, ja tinha feito assim, mas preciso da descrição entende, preciso da descrição, a quantidade de ingressos vendidos para essa descrição e o valor arrecadado no período escolhido pelo usuário.
É nisso que estou me batendo um pouco.

Agradeço novamente.


Agora entendi o ponto em questão, então no Firebird também funciona a consulta que você postou, fiz um exemplo aqui e deu certo

select distinct p.descricao
, count(vi.quantidade) as qtd
, sum(vi.valor_final_venda) as soma
from vendas v
inner join vendas_itens vi on (v.id = vi.id_venda)
inner join produtos p on (vi.produto = p.id)
where v.id = 47344
group by p.descricao, vi.quantidade, vi.valor_final_venda
order by 1,2,3

agrupou os itens com a mesma descrição, algum outro detalhe que está causando o erro, vou tentar identificar.
Responder

06/08/2019

Fernando Ito

Opa, bom dia, obrigado pela resposta em momento record, mas infelizmente não é isso você falou.
Verifiquei todas as possibilidades.
Estou vindo de um mundo do SQL Server, onde tudo é possível, kkk.

Se souber de mais alguma coisa eu agradeço.


Achei o erro, está no group by

group by IA.DESCRICAO, VI.QUANTIDADE, I.VALOR_TOTAL

deixa só como group by IA.DESCRICAO

daí vai dar certo, testa aí por favor!
Responder

06/08/2019

Fernando Wahl

Nossa cara, é verdade, fiz aqui e deu certo, pia, se vc tivesse aqui na cidade te pagava uma gelada hj, kkkk.
Valeu mesmo amigo.
Forte abraço.
Responder
select
	IA.DESCRICAO,
	count(VI.QUANTIDADE) as QTDE,
	sum(I.VALOR_TOTAL) as Total
from
	venda_ingresso VI
inner join ingresso as I
	on I.id = VI.ID_VENDA_INGRESSO
inner join ingresso_atracoes as IA
	on IA.id = VI.id_atracoes
WHERE
	I.DATA_VISITA BETWEEN '02.01.2019' AND '05.08.2019'
group by IA.DESCRICAO
order by IA.DESCRICAO

uma dica: quando se usa GROUP BY não faz sentido usar DISTINCT. Geralmente é um ou outro.
Responder