Sql SAS中的Oracle NVL等效项

Sql SAS中的Oracle NVL等效项,sql,oracle,sas,Sql,Oracle,Sas,我需要将sql代码转换为sas代码 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.SP

我需要将sql代码转换为sas代码

  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?这意味着什么

代替
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'))

完整查询中可能还有其他差异。

NVL
在Oracle中相当于SAS中的
coalesce
。它表示从列表中选择第一个非缺失值;因此,如果您有
NVL(A,B,C,0)
例如,如果A缺失,B缺失,C缺失,它将返回0;如果其中一个不丢失,它将返回最早的一个不丢失。

NVL表示如果该值为null,则使用第二个参数指定的值