0

ヘルプ!!

ビューのデータをデータ ウェアハウス テーブルにマージするクエリを作成しました。

ビューには 3 つの異なるデータベースからのデータがあります

TFN (pk ではなくタックス ファイル番号) が同じ場合、データ ウェアハウスの行を更新する必要があります。

ただし、(オーストラリアの) 2 つのテーブルのみが TFN を格納し、3 番目 (オーストラリアにない) は格納せず、これらの行のビューの TFN は null です。

私はいくつかのことを試しましたが、私が求めている結果を得ることができません

この試行は正常に実行されますが、同じ TFN で 2 行目を挿入します

MERGE INTO DWCUSTOMER d
using CUST_ALL_VIEW V
ON ((d.TFN = v.TFN AND d.COUNTRY = 'Australia') OR (d.CUSTOMER_ID = v.CUSTOMER_ID AND d.COUNTRY <> 'Australia'))
when matched then update set D.OCCUPATION = V.OCCUPATION, D.CITY = V.CITY, D.STATE = V.STATE,
d.POSTAL_CODE = v.POSTAL_CODE, d.REGION = v.REGION, d.COUNTRY = v.COUNTRY
when not matched then insert
(CUSTOMER_KEY, CUSTOMER_ID, CITY, STATE, POSTAL_CODE, GENDER, TFN, OCCUPATION, REGION, COUNTRY)
values
(DWCUSTSEQ.NEXTVAL, v.CUSTOMER_ID, v.CITY, v.STATE, v.POSTAL_CODE, v.GENDER, v.TFN, v.OCCUPATION, v.REGION, v.COUNTRY);

私が行った別の試みはうまくいきません(後で解決したように、多くの列の1つだけで一意/個別にすることはできません)が、私が達成しようとしていることをより正確に示しています(と思います:/)

merge into DWCUSTOMER D
using (select SOURCE_ROWID, TABLE_NAME, CUSTOMER_ID, CITY, STATE,
POSTAL_CODE, GENDER, REGION, COUNTRY, UNIQUE(TFN) AS TFN, OCCUPATION
from CUST_ALL_VIEW
where COUNTRY = 'Australia'
UNION
select *
from CUST_ALL_VIEW
WHERE COUNTRY <> 'Australia') v
on ((D.TFN = V.TFN and D.COUNTRY = 'Australia') or (D.CUSTOMER_ID = V.CUSTOMER_ID and D.COUNTRY <> 'Australia'))
when matched then update set D.OCCUPATION = V.OCCUPATION, D.CITY = V.CITY, D.STATE = V.STATE,
d.POSTAL_CODE = v.POSTAL_CODE, d.REGION = v.REGION, d.COUNTRY = v.COUNTRY
when not matched then insert
(CUSTOMER_KEY, CUSTOMER_ID, CITY, STATE, POSTAL_CODE, GENDER, TFN, OCCUPATION, REGION, COUNTRY)
values
(DWCUSTSEQ.NEXTVAL, v.CUSTOMER_ID, v.CITY, v.STATE, v.POSTAL_CODE, v.GENDER, v.TFN, v.OCCUPATION, v.REGION, v.COUNTRY);

修正するための提案??

ありがとう

マット

4

1 に答える 1