Case com variavel
Boa tarde, estou tentando realizar um laço condicional que receba o valor de uma variável e dependendo do valor passado retorne os registros que possuem determinados valores, porém não estou conseguindo com o case.
SELECT *
FROM CARGA
WHERE (CASE WHEN :VARIAVEL = 2 THEN ('2', '7')
WHEN :VARIAVEL = 3 THEN ('3', '9', '10')
WHEN :VARIAVEL = 4 THEN '4'
WHEN :VARIAVEL = 5 THEN '5'
WHEN :VARIAVEL = 6 THEN '6' END) IN DIAENTREGA;
SELECT *
FROM CARGA
WHERE (CASE WHEN :VARIAVEL = 2 THEN ('2', '7')
WHEN :VARIAVEL = 3 THEN ('3', '9', '10')
WHEN :VARIAVEL = 4 THEN '4'
WHEN :VARIAVEL = 5 THEN '5'
WHEN :VARIAVEL = 6 THEN '6' END) IN DIAENTREGA;
Rafael Gomes
Curtidas 0
Respostas
Emerson Nascimento
16/10/2019
aparentemente DIAENTREGA é um conteúdo alfanumérico, certo?
acredito que isto possa te ajudar (SQL SERVER):
note que há espaços entre todos os números retornados pelo CASE - por exemplo '_2_/_3_' - e também entre os percentuais. %_diaentrega_%
acredito que isto possa te ajudar (SQL SERVER):
select * from carga where (case @variavel when 2 then ' 2 / 3 ' when 3 then ' 3 / 9 / 10 ' when 4 then ' 4 ' when 5 then ' 5 ' when 6 then ' 6 ' else ' ' end) like '% '+diaentrega+' %'
note que há espaços entre todos os números retornados pelo CASE - por exemplo '_2_/_3_' - e também entre os percentuais. %_diaentrega_%
GOSTEI 0
Rafael Gomes
16/10/2019
aparentemente DIAENTREGA é um conteúdo alfanumérico, certo?
acredito que isto possa te ajudar (SQL SERVER):
note que há espaços entre todos os números retornados pelo CASE - por exemplo '_2_/_3_' - e também entre os percentuais. %_diaentrega_%
acredito que isto possa te ajudar (SQL SERVER):
select * from carga where (case @variavel when 2 then ' 2 / 3 ' when 3 then ' 3 / 9 / 10 ' when 4 then ' 4 ' when 5 then ' 5 ' when 6 then ' 6 ' else ' ' end) like '% '+diaentrega+' %'
note que há espaços entre todos os números retornados pelo CASE - por exemplo '_2_/_3_' - e também entre os percentuais. %_diaentrega_%
GOSTEI 0
Rafael Gomes
16/10/2019
aparentemente DIAENTREGA é um conteúdo alfanumérico, certo?
acredito que isto possa te ajudar (SQL SERVER):
note que há espaços entre todos os números retornados pelo CASE - por exemplo '_2_/_3_' - e também entre os percentuais. %_diaentrega_%
acredito que isto possa te ajudar (SQL SERVER):
select * from carga where (case @variavel when 2 then ' 2 / 3 ' when 3 then ' 3 / 9 / 10 ' when 4 then ' 4 ' when 5 then ' 5 ' when 6 then ' 6 ' else ' ' end) like '% '+diaentrega+' %'
note que há espaços entre todos os números retornados pelo CASE - por exemplo '_2_/_3_' - e também entre os percentuais. %_diaentrega_%
Boa tarde Emerson, consegui resolver da seguinte forma:
SELECT *
FROM CARGA
WHERE ( (:VARIAVEL = 2 AND AD_DIAENTREGA IN (2,8,9))
OR
(:VARIAVEL = 3 AND AD_DIAENTREGA IN (3,7,9))
OR
(:VARIAVEL = 5 AND AD_DIAENTREGA IN (5,9)) )
GOSTEI 0