Pomocí CASE výraz v KDE klauzule by měla stačit. Když říkáte, že nepotřebujete klauzuli where, pokud není splněna podmínka, pak vše, co chcete, je podmínka jako WHERE 1 = 1
, tj. když podmínka není splněna, vrátí všechny řádky. Musíte tedy nastavit nesplněnou podmínku jako vždy PRAVDA .
Například,
Mám stůl pro zaměstnance,
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>
Chci vybrat údaje o zaměstnanci, pokud je oddělení 20, použijte klauzuli where else vrátí všechny podrobnosti o zaměstnanci, ale vyfiltruje oddělení, které splňuje podmínku 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že pro oddělení 20 se použije filtr podle klauzule where a dostanu pouze řádek pro ename SCOTT, pro ostatní vrátí všechny řádky.