SQL Query在输出中检索已翻译的值

时间:2016-02-19 15:10:34

标签: sql oracle

我有一个位置表

pos_table

position_code job_code   location_code    pos_name              BUSINESS_UNIT

1             staff      delhi           supervisor               XYZ
2            supervor   manila          technical associate      ABC

mapping table 


table_code    source_code   business_unit   target_code 

LOC            DELHI          XYZ             10
loc            MANILA         ABC             20

job            staff         XYZ             01
job            supervisor    ABC             02

我想要一个连接映射表和pos_table的查询,以便

对于来自映射表target_code的输出01中的job_code人员应该来 使用business_unit和source_code作为连接。

输出:

position_code job_code   location_code    pos_name              BUSINESS_UNIT

1               01           10            supervisor               XYZ
2               02           20            technical associate      ABC

为此我编写了查询:

select POSITION_CODE,
 coalesce(JOB_MAP.FUSION_HARMONIZED_CODE,JOB_CODE) JOB_CODE,
   coalesce(LOC_MAP.FUSION_HARMONIZED_CODE,LOCATION_CODE)LOCATION_CODE 
from pos_tab POS_STAG,
  MAPPING_TAB LOC_MAP,
  mapping_tab job_MAP
where 1=1
and JOB_MAP.source_code||business_unit_name = POS_STAG.JOB_CODE||business_unit_name
and LOC_MAP.TABLE_CODE ='LOC'
and job_map.table_code='JOB'
and LOC_MAP.source_code ||business_unit_name = POS_STAG.LOCATION_CODE||business_unit_name; 

但这不起作用,而且它正在减少更多的行数

1 个答案:

答案 0 :(得分:1)

我不确定“SOURCE_CORE_HR_CODE”是什么,因为你没有在你的问题中解释它,但我猜测下面的内容是正确的。

问题是您正在使用映射表进行两个不同的连接,因此必须连接两次。

我正在使用“新”加入语法,该语法已作为标准存在了20多年。我建议你使用这种语法。 更容易理解SQL如何使用此语法。我不知道为什么有人会使用旧式。

SELECT P.POSITION_CODE, M1.TARGET_CODE AS JOB_CODE, M2.TARGET_CODE AS LOCATION_CODE, P.JOB_CODE AS POS_NAME, P.BUSINESS_UNIT
FROM POS_TABLE P
JOIN MAPPING_TABLE M1 ON P.JOB_CODE = M1.SOURCE_CODE AND upper(M1.TABLE_CODE) = 'JOB'
JOIN MAPPING_TABLE M2 ON P.BUSINESS_UNIT = M2.BUSINESS_UNIT AND upper(M2.TABLE_CODE) = 'LOC'