基于列验证合并表

时间:2014-02-19 17:56:41

标签: sql oracle merge

我有一个临时表,可以定期重新加载。此表中的数据必须转到目标表(完全相同的结构),但是,如果我有重复的值,则必须检查上次加载的数据并更新目标表。

示例:

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}}。否则,请忽略它。

有人可以帮忙解决这个问题吗?

提前致谢!

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)
;