2015-05-04 2 views
-3

я должен сделать запрос с оракулом, чтобы найти клиентов по некоторым приоритетным полем поля:SQL запросов по приоритету поля

NUM_CIN,NUM_PASS,BIRTHDATE,NAME 

приоритет в запросе являются:

1) Во-первых по NUM_CIN если нет результата, то

2) По NUM_PASS, если нет результата, то

3) По NAME + Дата рождения, если нет никакого результата

4) Только от ИМЯ

как это сделать с помощью oracle sql пожалуйста?

+1

Вам нужно более подробное объяснение того, что вы просите, предоставить некоторые примеры данных и показать, какие результаты вы хотите на основе данных этого образца. Моя первая мысль - использовать Analytics (используйте конструкцию row_number over(), чтобы упорядочить строки в нужном вам приоритете, а затем выберите первую строку .. что бы это ни было). – Ditto

ответ

0

вы можете объединить 4 запроса с 4 условиями и добавить виртуальный столбец с приоритетом. Что-то вроде этого:

WITH all_results AS (

    SELECT t1.*, 
     1 priority 
    FROM CUSTOMER_TABLE t1 
    WHERE NUM_CIN = ... 

    UNION 

    SELECT t2.*, 
     2 priority 
    FROM CUSTOMER_TABLE t2 
    WHERE NUM_PASS = ... 

    UNION 

    SELECT t3.*, 
     3 priority 
    FROM CUSTOMER_TABLE t3 
    WHERE NAME = ... AND BIRTHDATE = ... 

    UNION 

    SELECT t4.*, 
     4 priority 
    FROM CUSTOMER_TABLE t4 
    WHERE NAME = ... 

) 

SELECT * 
FROM all_results 
WHERE priority = (SELECT min(priority) FROM all_results) 
Смежные вопросы