使用带有条件聚合的子查询:
UPDATE test_table tt SET tt.product_case = COALESCE(ct.pc, tt.product_case), tt.customer_case = COALESCE(ct.cc, tt.customer_case) FROM (SELECT ct.MAINRECORD, MAX(CASE WHEN ct.TYPE = 'PC' THEN ct.ID END) as pc, MAX(CASE WHEN ct.TYPE = 'CC' THEN ct.ID END) as cc FROM CASETABLE ct WHERE ct.STATUS = 'ACTIVE' GROUP BY ct.MAINRECORD ) ct WHERE ct.MAINRECORD = tt.main_id ND (ct.pc is not null or ct.cc is not null);
你可以尝试下面 -
UPDATE test_table tt SET tt.product_case = (SELECT CASE WHEN ct.TYPE = 'PC' THEN ct.ID ELSE tt_.product_case END FROM CASETABLE ct WHERE ct.MAINRECORD = tt.main_id), tt.customer_case=(SELECT CASE WHEN ct.TYPE = 'CC' THEN ct.ID ELSE tt_.product_case END FROM CASETABLE ct WHERE ct.MAINRECORD = tt.main_id) WHERE EXISTS( SELECT 1 FROM CASETABLE ct WHERE ct.MAINRECORD = tt.main_id and STATUS = 'ACTIVE')
请试试这个
UPDATE tt SET tt.product_case = CASE WHEN ct.TYPE = 'PC' THEN ct.ID ELSE tt_.product_case END, tt.customer_case = CASE WHEN ct.TYPE = 'CC' THEN ct.ID ELSE tt.customer_case END FROM test_table tt INNER JOIN CASETABLE ct ON ct.MAINRECORD = tt.main_id WHERE ct.STATUS = 'ACTIVE'