Ajuda com select complicado

29/08/2019

0

Boa tarde a todos e todas, segue abaixo um código sql que está dando erro, alguém pode me ajudar a descobrir o que seja?

select
sum(vi.quantidade) as QtdeQueTem,
aat.Qtdemax as QtdeQuePode,
ia.descricao,
(case
when exists(select 1
from venda_ingresso vi
inner join ingresso as i on i.id = vi.id_venda_ingresso
inner join ingresso_atracoes ia on ia.id = vi.id_atracoes
having ('10:00:00' <= vi.hora_saida
and '12:00:00' >= i.hora_entrada )
and ia.id = 77
and (sum(vi.quantidade) >= aat.Qtdemax)
group by 1
order by 1 )
then 'Horário Ocupado'
else 'Horário Livre'
end) as VerificaPeriodo
from venda_ingresso vi
inner join ingresso as i on i.id = vi.id_venda_ingresso
inner join ingresso_atracoes ia on ia.id = vi.id_atracoes
inner join agrupador_atracoes as aat on aat.id = ia.idagrupador
where ia.id = 77
group by ia.descricao, QtdeQueTem, QtdeQuePode, VerificaPeriodo
order by ia.descricao, QtdeQueTem, QtdeQuePode, VerificaPeriodo


O erro que aparece é no gruop do select que está dentro do case.
Erro:
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 14, column 18.
group.
Fernando Wahl

Fernando Wahl

Responder

Post mais votado

29/08/2019

tente assim:
select
	sum(vi.quantidade) as QtdeQueTem,
	aat.Qtdemax as QtdeQuePode,
	ia.descricao,
	case
		when sum(	case
						when '10:00:00' <= vi.hora_saida and '12:00:00' >= i.hora_entrada
						then vi.quantidade
						else 0
					end
				) > aat.Qtdemax
		then 'Horário Ocupado'
		else 'Horário Livre'
	end VerificaPeriodo
from
	venda_ingresso vi
inner join
	ingresso as i on i.id = vi.id_venda_ingresso
inner join
	ingresso_atracoes ia on ia.id = vi.id_atracoes
inner join
	agrupador_atracoes as aat on aat.id = ia.idagrupador
where
	ia.id = 77
group by
	ia.descricao, aat.Qtdemax
order
	by ia.descricao, aat.Qtdemax


ou assim:
SELECT
	*,
	case when QtdSomada >= Qtdemax
		then 'Horário Ocupado'
		else 'Horário Livre'
	end VerificaPeriodo
FROM (
select
	sum(vi.quantidade) as QtdeQueTem,
	aat.Qtdemax as QtdeQuePode,
	ia.descricao,
	sum(	case
				when '10:00:00' <= vi.hora_saida and '12:00:00' >= i.hora_entrada
				then vi.quantidade
				else 0
			end
	) QtdSomada
from
	venda_ingresso vi
inner join
	ingresso as i on i.id = vi.id_venda_ingresso
inner join
	ingresso_atracoes ia on ia.id = vi.id_atracoes
inner join
	agrupador_atracoes as aat on aat.id = ia.idagrupador
where
	ia.id = 77
group by
	ia.descricao, aat.Qtdemax
) A
order by
	descricao, Qtdemax

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

30/08/2019

Fernando Wahl

Bom dia Emerson Nascimento,

Cara, obrigado pelo código que você arrumou, agora vi aonde que estava errando, mas a vida é assim, é errando que se aprende.
Obrigado novamente, só para constatar, o primeiro código que você mandou que deu certo.

O segundo deu um erro, mas o primeiro deu certo, o que fiz apenas foi adicionar a data para verificar se o horário esta livre naquele horário daquele a data determinada pelo usuário.

Grande abraço, caso precise de alguma coisa, estamos sempre por aqui.
Abraços.

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar