2011-09-08 57 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表中的任何内容,因此我没有看到查询该表的任何理由......我也没有理由看到这个联盟。只需要第一次选择所有你想要的行。

相关问题