2014-06-12 3 views
2

sas 코드로 변환해야합니다.Oracle에서 SAS와 동등한 NVL

NVL(SPRTELE_STATUS_IND, 'A') = 'A' 
    AND NVL(SPRTELE_PRIMARY_IND, 'Y') = 'Y' 
    AND NVL(SPRTELE_SEQNO, 99) = 

    (SELECT NVL(MAX(SPRTELE_SEQNO), 99) 
    FROM SATURN.SPRTELE D 
    WHERE SPRIDEN_PIDM = D.SPRTELE_PIDM 
    AND D.SPRTELE_TELE_CODE = 'MA' 
    AND NVL(D.SPRTELE_STATUS_IND, 'A') = 'A' 
    AND NVL(D.SPRTELE_PRIMARY_IND, 'Y') = 'Y')) 

어떻게 NVL을 sas로 변환 할 수 있습니까? 그게 무슨 뜻입니까

+0

NVL은 값이 null 인 경우 두 번째 매개 변수에 지정된 값을 사용한다는 것을 의미합니다. – MDiesel

답변

6

NVL() 대신 올바른 기능은 COALESCE()입니다. 이것은 ANSI 표준 기능이며 SAS, Oracle 및 대부분의 다른 데이터베이스에서 지원됩니다.

COALESCE(SPRTELE_STATUS_IND, 'A') = 'A' 
    AND COALESCE(SPRTELE_PRIMARY_IND, 'Y') = 'Y' 
    AND COALESCE(SPRTELE_SEQNO, 99) = 

    (SELECT COALESCE(MAX(SPRTELE_SEQNO), 99) 
    FROM SATURN.SPRTELE D 
    WHERE SPRIDEN_PIDM = D.SPRTELE_PIDM 
    AND D.SPRTELE_TELE_CODE = 'MA' 
    AND COALESCE(D.SPRTELE_STATUS_IND, 'A') = 'A' 
    AND COALESCE(D.SPRTELE_PRIMARY_IND, 'Y') = 'Y')) 

전체 쿼리에는 다른 점이있을 수 있습니다.

0

NVL은 SAS에서 coalesce과 같습니다. 그것은 목록에서 첫 번째 빗나가지 않는 값을 고르는 것을 말한다. 예를 들어 NVL(A,B,C,0)이 있으면 A가 누락되어 B가 누락되어 C가 누락되면 0을 반환합니다. 그것들 중 하나가 누락되지 않으면, 가장 틀린 것이 아닌 것을 돌려줍니다.

관련 문제