PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Usando a condição If na cláusula where

select * from sampleTable
where 
  case when @taxtype = 'P' then
    (taxtype = 'P' or  (taxtype = 'E' and code in ('MER','SER')))
  Else
    (taxtype = 'E' and code not in ('MER','SER'))
  end

Parece isso vai funcionar com Postres

Editar:

Deixando minha resposta original porque a essência funciona, mas O Postgres não tem um conceito de variáveis como outros RDBMSs, então reescrevi isso como
WITH myconstants as (SELECT 'P'::text as vtaxtype)

select * from sampleTable
where 
  case when (select vTaxType from myconstants) = 'P' then
    (taxtype = 'P' or  (taxtype = 'E' and code in ('MER','SER')))
  Else
    (taxtype = 'E' and code not in ('MER','SER'))
  end;

Aqui está um SQL Fiddle mostrando que