2013-06-06 2 views
0

SOA_VALUE를 기준으로 테이블에서 ROLE을 검색하려고합니다. SOA_VALUE가 100과 500 사이에 있으면 ROLE은 RSM이어야합니다. SOA_VALUE가 500 이상이면 ROLE은 TMM이어야합니다. SOA_VALUE는 프런트 엔드에서 제공됩니다.Case With with between db2

ROLE CHANNEL PLG  TRANTYPE  SOA_VALUE 
ASM  GT  DETS TRANSFER  0  
RSM  GT  DETS TRANSFER  100 
TMM  GT  DETS TRANSFER  500 

예 : SOA_VALUE가 122이면 역할이 RSM으로 설정되어야합니다.

Role.Thanks를 검색하기 위해 제안/예제 쿼리를 제공해주십시오.

답변

0

이 시도하십시오

SELECT CHANNEL,PLG,TRANTYPE,SOA_VALUE 
    FROM TABLE_X   
     WHERE ROLE = (CASE 
    WHEN (120 >= 100 AND 120 <=500) THEN 'RSM' 
    WHEN 120 > 500 THEN 'TMM' 
    ELSE NULL 
        end) 

위의 SOA_VALUE의 문자열 값으로 120을 교체합니다.

데모 : http://sqlfiddle.com/#!2/72d7f/3

+0

+1이 – NealB

+0

@Rajaganesh 값 위의 쿼리는 테이블에서 사용할 수있는 Soa_Value에 따라 Role과 함께 레코드를 제공합니다. 내가 위에 설명한 것처럼, 내 요구 사항은 조금 다르다. 나는 SOA_VALUE를 프론트 엔드 (html 텍스트 상자)에서 얻고있다 ... SOA_Master 테이블에서 적절한 역할을 선택해야한다. – Manu

+0

@Rajaganesh 아래 시나리오를 계속 진행하십시오 ... 프런트 엔드에서 122/channel/plg/trantype을 얻은 다음 soa_master에서 확인해야합니다 (122> 0 & 122 <= 100) 다음 ASM : 122> 100 & 122 <= 500) RSM : (122> 500) 다음 TMM. 최대 및 최소 값 (0,100,500)은 동일한 테이블의 역할, 채널, plg, trantype을 기준으로 검색해야합니다. – Manu

0

이것에 대해 어떻게 명시 적 SOA_VALUE이 <100 희망이 OP도 null를 테스트 케이스를 덮는

with t(input_soa_value) as (values 121) -- simulates input value 
select role from table_x where soa_value = (
    select max(soa_value) from table_x, t where soa_value < input_soa_value 
) 
+0

전체 행을 검색해야하는 경우가있을 것이라는 느낌을 제외하고는. 그러나이 라인을 따라 뭔가, 예. (아, 그리고 미래에는 sqlFiddle과 같은 것을 통해 예제를 실행하는 것이 예의라고 생각합니다.) –