2011-09-08 2 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

에서 필드는 큰 쿼리의 일부만 Matter_code을이다 가정입니까? 그렇다면 전체 쿼리를 제공하는 것이 좋습니다. –

답변

1

이보십시오, 나는 그 문제 테이블

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 테이블에서 아무것도 선택하지 않으므로 쿼리 할 이유가 없습니다. 볼 수있는 조합의 이유도 아닙니다. 처음으로 원하는 모든 행을 선택하기 만하면됩니다.

관련 문제