2012-08-30 5 views
0

다음 사례 사례에 문제가 있습니다. 나는 두 가지 방법으로 할 수 있다고 생각하지만 둘 다 나를 위해 일하고있다. 데이터를 파생시키기 위해 사용하는 두 개의 열이 있습니다. erpol.n_pol이 비어있는 경우사례 명세서 기준이 작동하지 않습니다. SQL

이 사용 idv.n_pol, 그렇지 않으면 erpol.n_pol을 사용하여 다음과 같이

은 기본적으로 기준이다.

둘 다 비어있는 경우 통합하고 싶습니다. ks.n_pol을 사용하십시오. ks.n_pol을 사용할 때를 식별하는 또 다른 방법은 dt.n_pol의 처음 세 글자가 "OAC"인 경우입니다.

도움을 주시면 대단히 감사하겠습니다.

이제는 그대로 작동 중입니다 (substring이 주석 처리되었습니다). "둘 다 빈 ks.n_pol을 사용한다면"추가 할 수 있어야합니다.

,dt.i_pol as "Policy_Number" 
, (case 
when erpol.n_pol is null then idv.n_pol 
/*when substr(dt.i_pol,1,3)= 'OAC' then ks.n_pol*/ 
else erpol.n_pol end) as "Policy_Name" 
,0 as "Division_Number" 
,d_dby as "Disability_Date" 
,0 as "Months_Since_Disability_Date" 
,0 as "First_Payment_Date" 
,0 as "Last_Payment_Date" 
,0 as "Last_Benefit_Paidto_Date" 
,dys as "Days_Since_Last_Paidto" 


from dt 
+2

무엇이 오류입니까? – CatchingMonkey

+1

어떤 데이터베이스 시스템 및 버전? * SQL *은 단지 구조화 된 쿼리 언어 *입니다 - 많은 데이터베이스 시스템에서 사용되는 언어이지만 데이터베이스 제품은 아닙니다 ... 우리는 실제로 ** 데이터베이스 시스템 **이 무엇인지 알고 있어야합니다 .... –

답변

4

당신은 COALESCE

는 예를 들어

3 존재의 널 (null)의 위험이 있다면
COALESCE (erpol.n_pol,idv.n_pol, ks.n_pol) 

, 다음 마지막에 기본을 추가 할 수 있습니다

COALESCE (erpol.n_pol,idv.n_pol, ks.n_pol, 'default') 
+0

Worked 완벽하고 깨끗합니다 - 감사합니다! – gfuller40

0

그것은 내가 그냥 "그들이에 모두 빈 사용 ks.n_pol 경우"를 추가 할 수 있어야합니다 (이 주석 문자열와) 같이 지금 노력하고 있습니다.

이 작동합니다 :

ISNULL(ISNULL(erpol.n_pol, idv.n_pol), ks.n_pol) 
1

이 특별한 경우 @ podiluska의 해결책이 way 인 경우 첫 번째 필드가 NULL이되면 바로 첫 번째 옵션이 선택되기 때문에 쿼리가 실패합니다.

나는 CASE WHEN에서 실행 순서에 대해 잘 모르겠지만, 일반적으로 가장 제한 조건이 있으므로, 먼저 이동하십시오 "OAC"테스트와 조건이 확실 있다면 언제

(CASE WHEN erpol.n_pol IS NULL AND idv.n_pol IS NULL THEN ks.n_pol 
     WHEN erpol.n_pol IS NULL THEN idv.n_pol 
     ELSE erpol.n_pol END) 

당신은 첫 번째를 대체 할 수 이것은 과 idv이 모두 NULLn_pol 인 것과 같습니다.

+0

+1 for fawning :) – podiluska

+0

나는 실제로 늦게 도착한 것에 대해 삐뚤 쳤다 :-) – LSerni