Oracle NVL相当于SAS

时间:2014-06-12 13:51:15

标签: 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.SPRTELE_TELE_CODE = 'MA' 
    AND NVL(D.SPRTELE_STATUS_IND, 'A') = 'A' 
    AND NVL(D.SPRTELE_PRIMARY_IND, 'Y') = 'Y'))

如何将NVL转换为sas?这是什么意思

2 个答案:

答案 0 :(得分:6)

使用的正确函数是NVL(),而不是COALESCE() 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')) 。这是ANSI标准功能,由SAS,Oracle和大多数其他数据库支持:

{{1}}

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

答案 1 :(得分:1)

Oracle中的

NVL相当于SAS中的coalesce。它说要从列表中选择第一个非缺失值;所以,如果您有NVL(A,B,C,0),例如,如果A缺失且B缺失且C缺失,则返回0;如果其中一个没有丢失,它将返回最早的没有丢失的那个。