在oracle中,我正在使用如下所示的Decode语句。出于安全原因,我不希望代码具有硬编码值,并且我计划创建新的查找表。
Select CONCAT( Decode(A.COUNTRY_INITIAL,
'A','America',
'B','Brazil',
'F','FINLAND',
NULL),
Decode(A.ADD_VALUE,
'M','YES',
NULL))
from (
Select SUBSTR(COUNTRY_BASE, -1,1) as COUNTRY_INITIAL,
SUBSTR(IS_VALUED, -1,1) as ADD_VALUE
from TBL1
)A
Refernece Table
*******************
Clmn1 Clmn2 Clmn3
--------------------------
cntry1 A America
cntry2 B Brazil
cntry3 F Finland
Value1 M YES
请您告诉我如何在解码逻辑中加入它。还可以在Oracle函数中使用此CODE SNIPPET。
答案 0 :(得分:1)
如果您要将查找信息存储在表格中,则不会使用DECODE
。你加入了两个表
SELECT ref.clmn3
FROM tbl1 t1
LEFT OUTER JOIN <<reference table>> ref
ON( substr(t1.country_base, -1, 1) = ref.clmn2 )
由于您的DECODE
有NULL
,我猜您希望某些行tbl1
在参考表中没有匹配的行,所以我猜你想要LEFT OUTER JOIN
而不是INNER JOIN
。
答案 1 :(得分:0)
如果您使用单独的表来存储值,则不需要解码功能。你可以简单地加入这两个表。
select a.country_base,
a.is_valued,
b.clmn3,
c.clmn3
from tbl1 a left outer join reference_table b
on (substr(a.country_base, -1, 1) = b.clmn2
and b.clmn1 like 'cntry%' --extra clause needed if there are same country and value codes
)
left outer join reference_table c
on (substr(a.is_valued, -1, 1) = c.clmn2
and c.clmn1 like 'Value%' --extra clause needed if there are same country and value codes
);
答案 2 :(得分:0)
如果您在表格中包含这些详细信息,则只需使用联接即可获得所需的输出。
select t1.COUNTRY_BASE,ref.Clmn3,ref1.Clmn3
frorm TBL1 t1
left outer join reftable ref
on SUBSTR(t1.COUNTRY_BASE, -1,1)=ref.Clmn2
left outer join reftable ref1
on SUBSTR(t1.IS_VALUED, -1,1)=ref.Clmn2;