我需要将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?这是什么意思
答案 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)
NVL
相当于SAS中的coalesce
。它说要从列表中选择第一个非缺失值;所以,如果您有NVL(A,B,C,0)
,例如,如果A缺失且B缺失且C缺失,则返回0;如果其中一个没有丢失,它将返回最早的没有丢失的那个。