2012-10-14 4 views
0

나는쿼리 테이블은

City POSTAGE PRICE**     

HOUSTON DEFAULT 20 
DEFAULT AIR  14 
DEFAULT GROUND  30 
DEFAULT DEFAULT 40 

같은 테이블이 지금은 완벽한 조합 있는지 확인해야한다 '시카고, 지상' 같은 조합이 테이블에 대한 가격 조회 할이 그 밖의 제가

예 HOUSTON은 AIR 14 HOUSTON를 반환한다 .. DEFAULT 대체하고 값을 검색해야 존재 GROUND는 20
HOUSTON, FEDEX 20 CHICAGO, FEDE 반환해야 돌려 X는

당신을 감사합니다 .. 대신 여러 쿼리를 작성하는이를 달성 할 수있는 방법이 있나요 (40)

를 반환해야합니다!

+1

HOUSTON, GROUND가 어떤 추론을해야 30 (DEFAULT, GROUND)이 아닌 20 (HOUSTON, DEFAULT)을 반환해야합니까? CITY가 우편보다 우선 순위가 높기 때문입니까? 또는 항상 최소 PRICE를 돌려 주시겠습니까? –

+0

예, CITY는 우편 요금보다 우선권이 있습니다 (기본값은 항목이 없기 때문에 기본값입니다) – Sr7

+0

HOUSTON, GROUND를 검색하는 경우 HOUSTON, DEFAULT 및 DEFAULT가 둘 다 있습니다. ,바닥. 그래서, 왜 HOUSTON, DEFAULT가 DEFAULT, GROUND보다 더 잘 어울리는 거지? –

답변

1

이 매개 변수를 전달에 대한 SQL * Plus에서 구문을 사용, 당신은 소송에 그것을 변경해야 할 수도 있습니다 : 이것은 여러 행을 반환하지만, 아마도 당신은 단지 하나 개의 가격을 원하는

select price 
from your_table 
where (city = '&p_city' or city = 'DEFAULT') 
and (postage = '&p_postage' or postage = 'DEFAULT') 
order by case when city = '&p_city' then 1 else 2 end 
      , case when postage = '&p_postage' then 1 else 2 end 

. ORDER BY 절은 POSTAGE의 경기보다 CITY의 경기를 우선시합니다. 그런 다음 첫 번째 행을 선택할 수 있습니다.

+0

감사합니다!, 나는 'packagetype'이라는 또 다른 열을 가지고 있습니다. by by order by 다른 케이스를 추가하려고하면 처음 두 필드에 'DEFAULT'와 DEFAULT가 일치합니다. – Sr7

+0

그리고 가르침은 : 당신이 당신의 질문에 모든 세부 사항을 제공하지 않으면 당신은 불완전한 대답을 얻을 것입니다. 따라서 귀하의 선택은 - 귀하의 질문을 편집하여 모든 정보를 포함 시키거나 직접 파악하십시오. – APC