2011-09-08 86 views
3

我創建了一個可以工作的案例子查詢,但是我確定必須有一個更簡單的方法來做到這一點?有沒有更好的方法來創建此案例查詢

查詢的目的是當billgrp_desc像'30%',然後從tbm.billgrp表中顯示billgrp_desc。從hbm.matter表

否則顯示matter_code時billgrp_desc不喜歡'30%」

查詢低於:

select 
case 
    when bllgrp_desc like '30%' then 'billgrp_desc' 
end 
from tbm.billgrp 
union 
select 
case 
    when exists (select billgrp_desc 
       from tbm.billgrp 
       where billgrp_desc not like '30%') then 'matter_code' 
    end 
from hbm.matter 
+0

一個字段是這只是一個大的查詢的一部分嗎?如果是的話,最好提供完整的查詢。 –

回答

1

試試這個,我假設Matter_code從此事表

select 
    case 
     when bllgrp_desc like '30%' then billgrp_desc 
    end 
from tbm.billgrp 
union 
    select 
      isNull(gp.billgrp_desc,mt.matter_code) 
    from hbm.matter mt 
    left join billgrp gp on billgrp_desc not like '30%' 
+0

基於他說他的當前方法有效的事實,我猜測他實際上想要選擇值'billgrp_desc'而不是列值。 –

+0

也許,真的不知道從這個問題...你是對的,但如果他只選擇文字串,他不需要事項表。我認爲他正在爲測試目的選擇文字字符串,一旦他得到正確的結果,他將用字段名稱替換它們。 – Sparky

+0

大家好,這個查詢的主要目的是驗證當billgrp_desc的前綴是30 ....使用billgrp_desc。否則,當billgrp_desc沒有30的前綴時...使用hbm.matter表中的matter_code。儘管你的查詢確實有效,但它需要很長時間才能運行,實際上它已經超過了3分鐘,並且仍在運行。我的查詢不太好,在5秒內返回結果集 – Nobody

2

我可能會走這條路:

select 
case 
    when bllgrp_desc like '30%' then 'billgrp_desc' 
    else 'matter_code' 
end 
from tbm.billgrp 

由於您沒有選擇matter表中的任何內容,因此我沒有看到查詢該表的任何理由......我也沒有理由看到這個聯盟。只需要第一次選擇所有你想要的行。

相關問題