There are million records that match following 3 updates. I was wondering if there is a better way to re-write the following 3?
----------------------------------
-----Update statement # 1
----------------------------------
MERGE INTO SCHEMA.Table T
USING (SELECT
S1.CUSTNO
,S1.SURR_KEY
FROM SCHEMA.SOURCE1 S1
INNER JOIN
SCHEMA.SOURCE2 S2
ON S2.SURR_KEY_2 = S1.SURR_KEY_2
WHERE S2.AREA_CD = 967
AND S1.STATUS = 'ACTIVE'
) s
ON (T.CUST_NO = s.CUST_NO)
AND T.LOCATION IN ('NA','EUR','ASIA')
WHEN MATCHED THEN
UPDATE SET
T.C1 = S1.SURR_KEY
WITH UR;
----------------------------------
-----Update statement # 2
----------------------------------
MERGE INTO SCHEMA.Table T
USING (SELECT
S1.CUSTNO
,S1.SURR_KEY
FROM SCHEMA.SOURCE1 S1
INNER JOIN
SCHEMA.SOURCE2 S2
ON S2.SURR_KEY_2 = S1.SURR_KEY_2
WHERE S2.AREA_CD = 967
AND S1.LAST_LOGIN_LOCTN = 'NEW YORK' -- Difference is here from above select query
) s
ON (T.CUST_NO = s.CUST_NO)
AND T.LOCATION IN ('NA','EUR','ASIA')
WHEN MATCHED THEN
UPDATE SET
T.C2 = S1.SURR_KEY --target table is same but different target column is updated here with same source Key becasue source key may have different value
WITH UR;
--------------------------------
-----Update statement # 3
-- Before Update#1 all T.C1, T.C2 are 0. LAST Update statement to set all the remaining values that did not match in #1 and #2 to 9999.
----------------------------------
UPDATE SCHEMA.Table T
SET T.C1 = 9999
,T.C2 = 9999
WHERE
T.C1 = 0
AND T.C2 = 0 ;
----------------------------------
-----Update statement # 1
----------------------------------
MERGE INTO SCHEMA.Table T
USING (SELECT
S1.CUSTNO
,S1.SURR_KEY
FROM SCHEMA.SOURCE1 S1
INNER JOIN
SCHEMA.SOURCE2 S2
ON S2.SURR_KEY_2 = S1.SURR_KEY_2
WHERE S2.AREA_CD = 967
AND S1.STATUS = 'ACTIVE'
) s
ON (T.CUST_NO = s.CUST_NO)
AND T.LOCATION IN ('NA','EUR','ASIA')
WHEN MATCHED THEN
UPDATE SET
T.C1 = S1.SURR_KEY
WITH UR;
----------------------------------
-----Update statement # 2
----------------------------------
MERGE INTO SCHEMA.Table T
USING (SELECT
S1.CUSTNO
,S1.SURR_KEY
FROM SCHEMA.SOURCE1 S1
INNER JOIN
SCHEMA.SOURCE2 S2
ON S2.SURR_KEY_2 = S1.SURR_KEY_2
WHERE S2.AREA_CD = 967
AND S1.LAST_LOGIN_LOCTN = 'NEW YORK' -- Difference is here from above select query
) s
ON (T.CUST_NO = s.CUST_NO)
AND T.LOCATION IN ('NA','EUR','ASIA')
WHEN MATCHED THEN
UPDATE SET
T.C2 = S1.SURR_KEY --target table is same but different target column is updated here with same source Key becasue source key may have different value
WITH UR;
--------------------------------
-----Update statement # 3
-- Before Update#1 all T.C1, T.C2 are 0. LAST Update statement to set all the remaining values that did not match in #1 and #2 to 9999.
----------------------------------
UPDATE SCHEMA.Table T
SET T.C1 = 9999
,T.C2 = 9999
WHERE
T.C1 = 0
AND T.C2 = 0 ;