2014-04-17 50 views
0

我想在Oracle查詢中使用。基於兩個互連列的條件結果

我需要這樣的事情,但不能圖中的語法,如果我能得到幫助

select process 
    from workstep 
where workstep_name = 'Manager' 
    and (performer != 'Test' if end_time =null). <----- this line 

這意味着,如果結束時間= NULL和表演=「測試」然後DONT顯示記錄;但是,例如,如果endTime不爲null,並且執行者='test',則顯示該記錄。

+0

你想表現出比「測試」表演其他記錄呢? –

回答

0

不能使用IF在與Oracle SQL,但是這是可能的簡單布爾邏輯。你只需要在同一時間來否定兩個條件:

select process 
    from workstep 
where workstep_name = 'Manager' 
    and not (performer = 'Test' and end_time is null) 
1

你能做到這樣

and (end_time is not null or (end_time is null and performer <> 'Test')) 

如果我們有這樣的DATAS(左邊是表演者,右邊是END_TIME)

'test' - notnulldate 

'test' - nulldate 

'tttt' - notnulldate 

'tttt' - nulldate 

this will return all lines except 'test'-nulldate 

也許你想

and ((end_time is not null and performer = 'Test') or (end_time is null and performer <> 'Test')) 

這將返回

'test'- notnulldate 

'tttt'- nulldate 
+0

這給了我結果endtime不是null和執行者不測試的結果,但我希望看到結果,其中執行者是NOt測試如果結束時間是NULL ..意味着如果執行者是測試然後不顯示NULL行結束時間,但是如果執行者不是測試,那麼DO顯示最後時間行 – junaidp

+0

@junaidp這應該在以下情況下返回數據:end_time不爲空,執行者爲任何(測試或不測試)+ end_time爲空,執行者不測試。這不是發生了什麼/你想要什麼? –

+0

@junaidp查看如果我明白你想要什麼,返回什麼回報的例子。 –

0

你可以試試下面的查詢:

select process 
from workstep 
where workstep_name = 'Manager' 
and (performer = 'Test' and end_time is not null); 

如果你想顯示所有的表演者,其中END_TIME不爲空,然後使用以下版本:

select process 
from workstep 
where workstep_name = 'Manager' 
and end_time is not null; 

編輯

根據你的說明,「如果演員是測試,那麼不顯示NULL結束時間的行,但如果演員不測試,然後DO顯示最後的結束時間行」,下面的查詢會得到你所需要的數據:

select process 
from workstep 
where workstep_name = 'Manager' 
and (performer <> 'Test' OR end_time is not null); 
+0

如果PERFORMER是'blah'和END_TIME不爲空會發生什麼? – Ben

+0

然後記錄將不會顯示。只有PERFORMER爲Test時,此查詢纔會顯示。 –

+0

我想查看結果,其中執行者是NOt測試如果結束時間是NULL ..意思是如果執行者是測試,那麼不顯示NULL結束時間的行,但是如果執行者不測試然後DO顯示最後結束時間行 – junaidp

0

「意味着,如果表演是先測試後不顯示的NULL結束該行的時間,但是,如果表演者不可考則確實顯示空結束時間排「

select process 
from workstep 
where workstep_name = 'Manager' 
and ((performer = 'Test' and endtime is not null) or(performer <> 'Test' and endtime is null)) 

」這意味着,如果結束時間= NULL和表演=‘測試’然後DONT顯示的記錄;但如果,例如,結束時間是不是null,表演=‘測試’,那麼SHOW記錄。」

select process 
from workstep 
where workstep_name = 'Manager' 
and ((endtime is not null and performer <> 'Test')or(endtime is not null and performer = 'Test')) 
+0

這個endtime不爲null並且執行者不測試的結果給我,但是我希望看到執行者在NOt測試中的結果如果結束時間是NULL ..意思是如果執行者是TEST那麼不顯示NULL行結束時間,但是如果演員不是測試,那麼DO顯示最後的時間行 – junaidp