2015-09-11 4 views
0

Здравствуйте, я пытаюсь разработать, казалось бы, простой отчет, в котором кто-то может ввести идентификационный номер или имя, а также искать и извлекать данные. Я могу заставить это работать, только если у меня есть все критерии, и я попробовал пару разных способов. Каждый из первых, последних и идентификаторов - это поля для заполнения или оставления пустых. Не тратя много места, вот что я по существу сделал, может ли кто-нибудь помочь?Запрос на объединение по ID или имени

Союз:

Select 
worker_id as "ID", 
worker_last_name as "Last", 
worker_first_name as "First", 
worker_phone_home as "Home_Phone", 
worker_email as "Email" 
from worker 
where worker_id = :parm_EB_pnum --inputvalue 
UNION 
Select 
worker_id as "ID", 
worker_last_name as "Last", 
worker_first_name as "First", 
worker_phone_home as "Home_Phone", 
worker_email as "Email" 
from worker 
where (
upper(worker_first_name) like upper(:parm_EB_first) and 
upper(worker_last_name) like upper(:parm_EB_last) 
) 

Это я также попытался использовать = вместо как для аналогичных результатов, мне нужны оба входа. Я попытался сделать заявление CASE в разделе where без UNION, но получил те же результаты

+1

Я не уверен, что я вижу вопрос здесь. Возвращает ли запрос то, что вы хотите? Если нет, отправьте воспроизводимый тестовый пример. Отправьте DDL, чтобы создать таблицу «worker», DML, чтобы вставить несколько строк выборки, сообщить нам, что представляют собой переменные связывания, и сообщить нам, какие строки вы хотите вернуть. –

+0

он возвращает строки только в том случае, если я заполняю как ID, first_name, так и Last_name. Я хочу, чтобы он возвращал значения, когда вводился только ID или имя First & Last, но не все из них. Извините, я не был чист. –

+0

- некоторые из этих значений null? что может вызвать проблемы. – Hogan

ответ

0

При использовании like вы должны использовать %. Кроме того, условие where с or будет достаточным для того, что вы пытаетесь сделать. Вы также можете сделать trim, чтобы удалить пробелы во входных значениях.

select 
worker_id as "ID", 
worker_last_name as "Last", 
worker_first_name as "First", 
worker_phone_home as "Home_Phone", 
worker_email as "Email" 
from worker 
where worker_id = :parm_EB_pnum 
or upper(worker_first_name) like '%'||upper(:parm_EB_first)||'%' 
or upper(worker_last_name) like '%'||upper(:parm_EB_last)||'%' 
+0

Есть ли способ для этого работать без всех необходимых значений? Мне интересно, если это мое программное обеспечение (argos). Кажется, это дает мне только результаты, когда у меня есть идентификатор, имя и фамилия. Хорошо, что он это делает, но, скорее всего, люди просто будут использовать один или другой идентификатор или имя –

+0

, или в запросе это делает. Возвращает строку при выполнении любого из трех условий –

0

попробовать

Select 
worker_id as "ID", 
worker_last_name as "Last", 
worker_first_name as "First", 
worker_phone_home as "Home_Phone", 
worker_email as "Email" 
from worker 
where worker_id = (CASE WHEN :parm_EB_pnum > 0 THEN :parm_EB_pnum END) 
UNION 
Select 
worker_id as "ID", 
worker_last_name as "Last", 
worker_first_name as "First", 
worker_phone_home as "Home_Phone", 
worker_email as "Email" 
from worker 
where 
upper(worker_first_name) like (CASE WHEN :parm_EB_first IS NOT NULL THEN upper(:parm_EB_first) END) 
and upper(worker_last_name) like (CASE WHEN :parm_EB_last IS NOT NULL THEN upper(:parm_EB_last) END) 
Смежные вопросы