PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Sử dụng điều kiện If trong mệnh đề 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

Có vẻ như điều này sẽ hoạt động với Postres

Chỉnh sửa:

Để lại câu trả lời ban đầu của tôi vì ý chính hoạt động nhưng Postgres không có khái niệm về biến giống như các RDBMS khác nên tôi đã viết lại cái này là

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;

Đây là SQL Fiddle cho thấy rằng



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dấu thời gian postgres now () không thay đổi khi tập lệnh hoạt động

  2. Tại sao giao dịch có thể tuần tự hóa của PostgreSQL lại nghĩ rằng đây là xung đột?

  3. Java Crosstab - câu lệnh chuẩn bị truy vấn

  4. Barman Cloud - Phần 2:Cloud Backup

  5. user postgres khởi chạy quy trình sử dụng tất cả các CPU 100%