Sql baseado na condição dinâmica onde

1

Eu tenho uma consulta, neste, existem várias condições com base no parâmetro

select a,b,c,d from xyz where case p='Closed' then (q-r)=0 case p='Pending' then (q - isnull(r,0) )>0 case P='All' then all records to be display

Fornece sintaxe incorreta perto do caso de linha

Por favor, sugira-me qualquer outra solução para alterar 'where condition' dependendo do valor do parâmetro,

desde que em determinado sql, a condição 'where' depende do valor do parâmetro p.

Você pode ver em determinada sintaxe, se o valor do parâmetro for alterado, a condição também será alterada.

No primeiro caso, se p = 'Fechado', então select ... where q-isnull(r,0)=0

se p = 'Pendente', então select ... where (q - isnull(r,0) )>0

Na primeira condição, está a comparar 'igual a' condição & no próximo exemplo, é 'maior que' valor zero.

como na terceira condição, quero exibir todos os registros.

Aqui o problema é que a estrutura 'case' só retorna um valor, não uma expressão.

    
por curious K 08.11.2017 / 14:27

1 resposta

0

Se você quiser que vários critérios sejam avaliados em sua declaração de caso, tudo o que você precisa fazer é mudá-los para antes de THEN e retornar um valor que indique que ele foi aprovado na verificação.

Para o seu código, isso pode ser feito assim:

select a,b,c,d from xyz where 1 =
case p='Closed' and (q-r)=0 then 1
case p='Pending' and (q - isnull(r,0) )>0 then 1
case P='All' then 1

Embora sua sintaxe não funcione com o SQL Server (não sei qual banco de dados você está consultando). Uma versão de trabalho no SQL Server seria:

select a,b,c,d from xyz where 1 =
CASE 
    WHEN p='Closed' AND (q-r)=0 THEN 1
    WHEN p='Pending' AND (q - isnull(r,0) )>0 THEN 1
    WHEN P='All' THEN 1
    ELSE 0 
END
    
por 08.11.2017 / 14:34

Tags