Oracle 中的条件 where 子句
Conditional where clause in Oracle
我有如下数据库table
+----------+----------+------------+
| emp_code | emp_name | emp_status |
+----------+----------+------------+
| 01 | aaa | A |
| 02 | bbb | A |
| 03 | ccc | A |
| 04 | ddd | I |
| 05 | eee | I |
| 06 | fff | R |
+----------+----------+------------+
我想根据将动态传递的 emp_status 选择值
1. If emp_status='A' it should fetch emp_codes with emp_status='A'
2. If emp_status='I' it should fetch all emp_codes except emp_status='I'
3. If emp_status is null then fetch all emp_codes.
如何编写包含所有条件的单个 sql 查询?
您可以使用 OR
和 AND
运算符来使用条件 WHERE
子句,如下所示:
SELECT EMP_CODE FROM YOUR_TABLE
WHERE ('&INPUT_STATUS' = 'A' AND emp_status='A')
OR ('&INPUT_STATUS' = 'I' AND emp_status<>'I')
OR ('&INPUT_STATUS' IS NULL)
干杯!!
您可以使用这样的 case..when
表达式:
SELECT *
FROM tab
WHERE CASE
WHEN :emp_status='A' THEN 'A'
WHEN :emp_status='I' THEN emp_status
WHEN :emp_status is null THEN emp_status
END = emp_status
AND ( emp_status != 'I' OR :emp_status is null )
其中 :emp_status
是要传递到查询中的绑定变量。
或者,您也可以使用 DECODE()
函数
SELECT *
FROM tab
WHERE DECODE( :emp_status, 'A', 'A', 'I', emp_status, null , emp_status ) = emp_status
AND ( emp_status != 'I' OR :emp_status is null )
我有如下数据库table
+----------+----------+------------+
| emp_code | emp_name | emp_status |
+----------+----------+------------+
| 01 | aaa | A |
| 02 | bbb | A |
| 03 | ccc | A |
| 04 | ddd | I |
| 05 | eee | I |
| 06 | fff | R |
+----------+----------+------------+
我想根据将动态传递的 emp_status 选择值
1. If emp_status='A' it should fetch emp_codes with emp_status='A' 2. If emp_status='I' it should fetch all emp_codes except emp_status='I' 3. If emp_status is null then fetch all emp_codes.
如何编写包含所有条件的单个 sql 查询?
您可以使用 OR
和 AND
运算符来使用条件 WHERE
子句,如下所示:
SELECT EMP_CODE FROM YOUR_TABLE WHERE ('&INPUT_STATUS' = 'A' AND emp_status='A') OR ('&INPUT_STATUS' = 'I' AND emp_status<>'I') OR ('&INPUT_STATUS' IS NULL)
干杯!!
您可以使用这样的 case..when
表达式:
SELECT *
FROM tab
WHERE CASE
WHEN :emp_status='A' THEN 'A'
WHEN :emp_status='I' THEN emp_status
WHEN :emp_status is null THEN emp_status
END = emp_status
AND ( emp_status != 'I' OR :emp_status is null )
其中 :emp_status
是要传递到查询中的绑定变量。
或者,您也可以使用 DECODE()
函数
SELECT *
FROM tab
WHERE DECODE( :emp_status, 'A', 'A', 'I', emp_status, null , emp_status ) = emp_status
AND ( emp_status != 'I' OR :emp_status is null )