SAS中的Oracle NVL等价函数

4

我需要将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 的意思是,如果该值为 null,则使用第二个参数指定的值。 - MDiesel
2个回答

7

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

完整查询可能存在其他差异。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接