首页 > 解决方案 > 将 DECODE 转换为映射/参考表

问题描述

我想确保将DECODE函数转换为将其SELECT连接到映射表的语句将正常运行,并且我没有使用在 SQL Server 中有效但在 Oracle SQL 中不同的编码或格式

关于代码:它正在使用该DECODE功能将一系列四位数的医学分类代码映射为两位数的提供者专业代码。主表是PRVDR.TXNMY_CD,结果将是一列PRFRM_PRVDR_SPCLTY_CD

原始代码:

SELECT 
    DECODE (SUBSTR(PRVDR.TXNMY_CD, 1, 4),
           '261Q', '70','347E', '59','332H', '96','332B', 'A6','1711', 'Y9','2257', 'Y9','106H', '62','103K', '26','101Y', '26','367A', '42','207K', '03', '3416', '59','367H', '32','207L', '05','211D', '48','231H', '64','2376', '64','111N', '35','291U', '69','103G', '86','364S', '89','208C', '28', '172V', '60','251S'
           ) END AS PRFRM_PRVDR_SPCLTY_CD
FROM 
    NPS_CLM_HDR

我的转换尝试:

首先,我将单独创建这个名为 MAPPING 的表,其中包含以下列

| TXNMY_CD_MAP | PRFRM_PRVDR_SPCLTY_CD |
| 1711         | Y9                    |
| 2257         | Y9                    |
| 106H         | 62                    |
| 367A         | 42                    |

    etc.

然后我会使用以下查询:

SELECT PRFRM_PRVDR_SPCLTY_CD
FROM REF.MAPPING AS M
JOIN PRVDR.TXNMY_CD AS P ON P.TXNMY_CD = M.TXNMY_CD_MAP

这看起来正确还是我使用了 SQL Server 中不适用于 Oracle SQL 的术语?

标签: sqlsql-serveroracle

解决方案


嗯。. . 我期望这两列是:

TXNMY_CD4  PRFRM_PRVDR_SPCLTY_CD
'261Q'      '70'
'347E'      '59'
'332H'      '96'
. . .

可能是您的表格的样子,但这些是表格开头的值。

接着:

SELECT m.PRFRM_PRVDR_SPCLTY_CD
FROM PRVDR.TXNMY_CD P LEFT JOIN
     REF.MAPPING M
     ON LEFT(P.TXNMY_CD, 4) = M.TXNMY_CD_MAP

除了LEFT()vs. SUBSTR(),这应该适用于两个数据库。

请注意,这用于LEFT JOIN确保即使没有匹配项也不会丢失任何行。


推荐阅读