2013-12-23 3 views
2

Я работаю над устаревшей системой, и многие структуры базы данных ужасающие (пары ключ/значение).Если условие в Oracle SQL

У меня есть следующий оператор выбора:

(
    SELECT D.F_VALUE 
     FROM T_WEB_QUOTES_DATA D 
     WHERE 
      D.F_QUOTE_ID = TO_CHAR(VR_RENTAL.QUOTEID) 
     AND D.F_KEY = 'Secondary_Driver_Forename' 
) AS "SECONDARY_DRIVER_FORENAME" 

Так как вы можете видеть, что ищет запись, где F_Key столбца имеет значение Secondary_Driver_Forename. Проблема в том, что есть еще один F_Key, который содержит ту же самую точную информацию, и мне нужно проверить оба ключа.

Так что я хочу сделать, это:

Если нет записей, где F_Key = Secondary_Driver_Forename или такой записи существует, но значение является пустой строкой или пустой, то я хотел бы пойти и посмотреть для записи, где F_Key равен 2ndary_Driver_FirstName, и если это не существует (или является нулевым), я хотел бы вернуть строку: No Key

Как я могу достичь этого в Oracle SQL?

Я был бы очень признателен за любую помощь.

Thank you.

ответ

3

Я имею в виду что-то вроде этого:

(
    SELECT (case when max(case when D.F_KEY in 'Secondary_Driver_Forename' then 1 else 0 end) = 1 
       then max(case when D.F_KEY in 'Secondary_Driver_Forename' then D.F_VALUE end) 
       else max(D.F_Value) 
      end) 
     FROM T_WEB_QUOTES_DATA D 
     WHERE 
      D.F_QUOTE_ID = TO_CHAR(VR_RENTAL.QUOTEID) 
     AND D.F_KEY in ('Secondary_Driver_Forename', '2ndary_Driver_FirstName') 
) AS "SECONDARY_DRIVER_FORENAME"; 

То есть, сделать условный агрегацию значений. Если первичное значение присутствует, используйте его. В противном случае просто выберите значение, которое есть (либо NULL, либо значение из второго ключа).

+0

Спасибо, отлично работает :) – Ciwan

Смежные вопросы