PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utilisation de la condition If dans la clause 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

On dirait cela fonctionnera avec Postres

Modifier :

Laissant ma réponse d'origine parce que l'essentiel fonctionne mais Postgres n'a pas de concept de variables comme les autres RDBMS, j'ai donc réécrit ceci comme

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;

Voici un SQL Fiddle montrant que