Korzystanie z CASE wyrażenie w GDZIE klauzula powinna załatwić sprawę. Kiedy mówisz, że nie potrzebujesz klauzuli WHERE, jeśli warunek nie jest spełniony, wystarczy warunek taki jak WHERE 1 = 1
, tj. gdy warunek nie jest spełniony, zwróć wszystkie wiersze. Musisz więc ustawić niespełniony warunek jak zawsze PRAWDA .
Na przykład
Mam stół pracowniczy,
SQL> SELECT empno, ename, deptno
2 FROM emp;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
7934 MILLER 10
14 rows selected.
SQL>
Chcę wybrać dane pracownika, jeśli dział ma 20 lat, użyj klauzuli where, w przeciwnym razie zwróć wszystkie dane pracownika, ale odfiltruj dział, który spełnia warunek where.
SQL> SELECT empno, ename, deptno
2 FROM emp
3 WHERE ename =
4 CASE
5 WHEN deptno = 20
6 THEN 'SCOTT'
7 ELSE ename
8 END
9 /
EMPNO ENAME DEPTNO
---------- ---------- ----------
7499 ALLEN 30
7521 WARD 30
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7900 JAMES 30
7934 MILLER 10
10 rows selected.
SQL>
Tak więc dla działu 20 filtr jest stosowany według klauzuli where i otrzymuję tylko wiersz dla ename SCOTT, dla innych zwraca wszystkie wiersze.