Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano MSB

colocar um case no where

Recommended Posts

em oracle existe alguma forma de colocar um case no where, a idéia seria mais ou menos essa.SELECT 'ADRIANO' AS A, 5 AS X, 10 AS Y FROM DUAL WHERE CASE WHEN X = 5 THEN Y > 10 WHEN X = 10 THEN Y > 20 WHEN X = 15 THEN Y > 30 END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi bem mas aqui vai um exemplo

 

SELECT *
FROM CLIENTES
WHERE 
(CASE WHEN UF_ENDER = 'RJ' THEN 'BOM' 
		   WHEN SALDO_DEVEDOR = 0 THEN 'BOM'
		   WHEN SALDO_DEVEDOR BETWEEN .01 AND 99 THEN 'MEDIO'
		   ELSE 'RUIM' END) <> 'RUIM'

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim entendi ja ajuda, porém meu problema é o seguintedependendo do valor de um campo os criterios do where são diferentes se fosse pra fazer um script seria assimdeclarev_tipo integer := 5;beginif v_tipo = 5 then select nome, end, dt_add from tb_cliente where dt_add = sysdate;end if;if v_tipo = 10 then select nome, end, dt_add from tb_cliente where dt_add > sysdate - 90;end if;if v_tipo = 15 then select nome, end, dt_add from tb_cliente where dt_add > sysdate - 200;end if;end;isso funcionaria, mas como o select é sempre o mesmo, ao enves de ficar colocando um monte de if e reescrevendo o select queria saber se da pra fazer algo tipo assimdeclarev_tipo integer := 5;begin select nome, end, dt_add from tb_cliente where case v_tipo when 5 then dt_add = sysdate when 10 then dt_add > sysdate - 90 when 15 then dt_add > sysdate - 200 end;end;claro isso é só um exemplo, no meu projeto dependendo do valor de uma variavel dessas, os criterios poderão ser completamente diferentes com campos diferentes de filtroserá que deu pra voces entenderem? e será que da pra fazer u que e eu estou querendo?desde ja agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

when 5 then dt_add = sysdate

when 10 then dt_add > sysdate - 90

when 15 then dt_add > sysdate - 200

 

TENTA ASSIM

 

dt_add >= (CASE WHEN 5 THEN SYSDATE WHEN 10 THEN SYSDATE-90 WHEN 15 THEN SYSDATE-200 END)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.