Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como faço para usar o Case com o "In", por exemplo no caso abaixo?
(case gope.cd_grp_operat
when 1 then 1
when 3 then 1
when 15 then 1
when 25 then 1
when 35 then 1
when 45 then 1
when 55 then 1
else 99
end ) ib_controla_km,
-- Eu posso fazer asism?
(case gope.cd_grp_operat
when in (1, 3, 15, 25, 35, 45, 55)
else 99
end ) ib_controla_km,
Ou assim, aninhando o (1, 3, 45) dentro de um "IN":
(case gope.cd_grp_operat
when gope.cd_grp_operat = 1 then
(Select Vl_hori_odom
From Apabastec_De
Where Apabastec_De.Id_Equipto = eq.id_equipto
And Dt_Abastec = (Select Max(Dt_Abastec)
From Apabastec_De
Where ID_Equipto = eq.id_equipto)
)
when 2 then
(Select Vl_hori_odom
From Apabastec_De
Where Apabastec_De.Id_Equipto = eq.id_equipto
And Dt_Abastec = (Select Max(Dt_Abastec)
From Apabastec_De
Where ID_Equipto = eq.id_equipto)
)
when 45 then
(Select Vl_hori_odom
From Apabastec_De
Where Apabastec_De.Id_Equipto = eq.id_equipto
And Dt_Abastec = (Select Max(Dt_Abastec)
From Apabastec_De
Where ID_Equipto = eq.id_equipto)
)else 0
end)f_km_inicial,Obrigado Motta, tão simples e eu dificultando, Deus abençoe.
Não sei se tenho que abrir outro tópico, mas veja o que ocorre:
No meu query, se coloco um campo assim ele funciona normalmente:
(case when gope.cd_grp_operat in (1, 3, 45)
then
(Select Vl_hori_odom
From Apabastec_De
Where Apabastec_De.Id_Equipto = eq.id_equipto
And Dt_Abastec = (Select Max(Dt_Abastec)
From Apabastec_De
Where ID_Equipto = eq.id_equipto)
) else 0 end)f_km_inicial
Mas se coloco o outro campo, dá o erro: ORA-01427: a subconsulta de uma única linha retorna mais de uma linha:
(case when gope.cd_grp_operat in (1, 3, 45)
then
(Select Vl_hori_odom
From Apabastec_De
Where Apabastec_De.Id_Equipto = eq.id_equipto
And Dt_Abastec = (Select Max(Dt_Abastec)
From Apabastec_De
Where ID_Equipto = eq.id_equipto)
) else 0 end)f_km_inicial, --38
(case when gope.cd_grp_operat not in (1, 3, 45)
then
(Select Vl_hori_odom
From Apabastec_De
Where Apabastec_De.Id_Equipto = eq.id_equipto
And Dt_Abastec = (Select Max(Dt_Abastec)
From Apabastec_De
Where ID_Equipto = eq.id_equipto)
) else 0 end) f_horimetro_inicial --39ORA-01427: a subconsulta de uma única linha retorna mais de uma linha
Quando se usa subselect como coluna este só pode retornar no máximo uma linha
A síntaxe do case no sql é algo como
(Case when gope.cd_grp_operat in (1,2,3,7) then 'S' else 'N' end) operacoes_xpto,