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.
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
Curtir tópico
+ 1
Responder
Post mais votado
29/08/2019
tente assim:
ou 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
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.
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
Clique aqui para fazer login e interagir na Comunidade :)