我有一个临时表,可以定期重新加载。此表中的数据必须转到目标表(完全相同的结构),但是,如果我有重复的值,则必须检查上次加载的数据并更新目标表。
示例:
TMP_DP_REGIAO
SG NOME LOADING_DATE
AM RG_1102 19-FEB-14
RO RG_1103 19-FEB-14
AP RG_1104 19-FEB-14
TO RG_1105 19-FEB-14
RO RG_1106 19-FEB-14
加载后,这些数据应转到TB_DP_REGIAO
(正如我所说,具有相同的结构)。
重点是:
如果SG
中已存在TMP
中的TB
,则SQL必须验证TMP
中的此记录是否比LOADING_DATE
中的TB
更高TB
}。如果是,请更新{{1}}。否则,请忽略它。
有人可以帮忙解决这个问题吗?
提前致谢!
答案 0 :(得分:1)
这个SQL可以满足您的需求:
merge into TB_DP_REGIAO B
using TMP_DP_REGIAO P
on (P.SG = B.SG)
when matched then update set B.NOME = case when B.LOADING_DATE < P.LOADING_DATE then P.NOME else B.NOME end,
B.LOADING_DATE = case when B.LOADING_DATE < P.LOADING_DATE then P.LOADING_DATE else B.LOADING_DATE end
when not matched then insert(SG, NOME, LOADING_DATE) values(P.SG, P.NOME, P.LOADING_DATE)
;