PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използване на условие If в клауза 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

Изглежда това ще работи с Postres

Редактиране:

Оставям оригиналния си отговор, защото същността работи, но Postgres няма концепция за променливи подобно на други RDBMS, така че пренаписах това като

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;

Ето SQL Fiddle показвайки това



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails:разрешението е отказано за relation schema_migrations

  2. LISTEN/NOTIFY с помощта на pg_notify(текст, текст) в PostgreSQL

  3. Рекурсивна CTE конкатенация на полета с родители от произволна точка

  4. Две SQL LEFT JOINS дават неправилен резултат

  5. SQL заявка 6 степени на разделяне за мрежов анализ