2016-02-19 54 views
1

翻譯值我有一個位置表SQL查詢以檢索輸出

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查詢列,使得

爲JOB_CODE人員映射表target_code的輸出01應該來自 ,使用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; 

,但是這是行不通的,它是rerieving更多的行數

+0

您顯示的數據看起來很不一致;混合大小寫映射表的table_code中,pos表的作業代碼有'supervor'而不是'supervisor'。這是你的實際數據,還是你爲這個問題做好了準備? –

+0

@ AlexPoole-這是一個示例數據..請原諒打字錯誤 –

+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' 
+0

@ hogan-同樣的問題..很多行從aboev查詢 –

+0

回想你有多少期望 - 爲什麼這麼多? – Hogan

+0

我試過使用這個@Hogan,但現在它的行數減少了......我試圖找出原因。將更新你 –