帮助!!
我编写了一个查询,将视图中的数据合并到数据仓库表中
该视图包含来自3个不同数据库的数据
如果TFN(税号,不是pk)相同,我需要更新数据仓库中的一行
然而,只有2个表(在澳大利亚)存储TFN,第三个(不在Aus中)不存储,并且这些行的视图中的TFN为空
我尝试了一些事情,但是不能得到我追求的结果
此尝试运行正常但插入第二行使用相同的TFN
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);
我做的另一个尝试不起作用(因为我后来解决了,你不能在众多专栏中的一个上有一个独特的/不同的),但它更好地展示了我想要达到的目标(我认为:/ )
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);
修改建议??
由于
马特
答案 0 :(得分:0)
(迟到的回答是晚了)尝试更改TFN与此比较:
ISNULL(d.TFN,-9) = isnull(v.TFN,-9)
(其中-9显然是无效的TFN - 只是为了解决SQL Null比较的奥秘)