Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle warunkowe klauzula gdzie

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić, które kolumny nie są używane w ALL_TAB_COLS?

  2. ORA-01704:literał ciągu za długi „Błąd podczas wstawiania dokumentu XML w kolumnie typu Oracle XMLTYPE”

  3. Jak mogę utworzyć tabelę jako wybraną z innej bazy danych w Oracle?

  4. Oracle ListaGG, 3 najczęściej występujące wartości, podane w jednej kolumnie, pogrupowane według ID

  5. Uzyskanie MS Office 2013 (32-bitowy) Excel i Access do połączenia z bazą danych Oracle, gdy zainstalowany jest zarówno klient 32, jak i 64