Oracle
 sql >> Datenbank >  >> RDS >> Oracle

If-Anweisung innerhalb der Where-Klausel

CASE könnte Ihnen dabei helfen:

SELECT t.first_name,
       t.last_name,
       t.employid,
       t.status
  FROM employeetable t
 WHERE t.status = (CASE WHEN status_flag = STATUS_ACTIVE THEN 'A'
                        WHEN status_flag = STATUS_INACTIVE THEN 'T'
                        ELSE null END)
   AND t.business_unit = (CASE WHEN source_flag = SOURCE_FUNCTION THEN 'production'
                               WHEN source_flag = SOURCE_USER THEN 'users'
                               ELSE null END)
   AND t.first_name LIKE firstname
   AND t.last_name LIKE lastname
   AND t.employid LIKE employeeid;

Die CASE-Anweisung wertet mehrere Bedingungen aus, um einen einzelnen Wert zu erzeugen. Bei der ersten Verwendung überprüfe ich also den Wert von status_flag, gebe je nach Wert 'A', 'T' oder null zurück und vergleiche das mit t.status. Ich mache dasselbe für die Spalte business_unit mit einer zweiten CASE-Anweisung.