2015-09-11 26 views
0

您好,我正在嘗試開發一個看似簡單的報告,其中有人可以輸入ID號或名稱並搜索和檢索數據。只有當我擁有所有的標準時,我才能使其發揮作用,並且我嘗試了幾種不同的方式。 First,Last和ID中的每一個都是填充或留空的框。這裏沒有浪費太多空間是我基本上做的,任何人都可以幫忙嗎?通過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) 
) 

這是我使用=,而不是像類似的結果也試過,我需要兩個輸入。我試圖在沒有UNION的where子句中使用CASE語句,但得到了相同的結果

+1

我不知道,我在這裏看到的問題。查詢是否返回你想要的內容?如果沒有,發佈一個可重複的測試用例。發佈DDL來創建'worker'表,DML插入一些示例行,告訴我們綁​​定變量是什麼,並告訴我們你想要返回哪些行。 –

+0

它只會返回行,如果我填入ID,first_name和Last_name。我希望它只在輸入ID或名字和姓氏時才返回值,而不是全部。對不起,我不清楚 –

+0

是這些值中的一些值爲空嗎?這可能會導致問題。 – Hogan

回答

0

當您使用like時,應該使用%。此外,與orwhere條件將足以爲您正在嘗試做什麼。您也可以執行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)。當我有ID,名字和姓氏時,它似乎只給我結果。它很好,但很可能人們只會使用其中一個或另一個,ID或名稱 –

+0

或在查詢中做到這一點。當滿足3個條件中的任何一個時,返回一行 –

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)