Используйте выражение CASE
:
INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME,
GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT
dwcustSeq.nextval, cb.custid, Null, cb.fname, cb.sname,
CASE WHEN cb.gender IS NULL THEN 'U'
ELSE (select trim(gs.NEW_VALUE) FROM genderspelling gs
WHERE upper(gs.INVALID_VALUE) = upper(cb.GENDER))
END,
cb.phone, cb.postcode, cb.city, cb.state, cc.custcatname
FROM a2custbris cb
NATURAL JOIN a2custcategory cc
WHERE cb.rowid IN (SELECT source_rowid FROM A2ERROREVENT where filterid = 7);
Если вы хотите 'U'
для каждого значения, которое не соответствует в genderspelling
, тогда используйте COALESCE
вместо:
INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME,
GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT
dwcustSeq.nextval, cb.custid, Null, cb.fname, cb.sname,
COALESCE(
(select trim(gs.NEW_VALUE) FROM genderspelling gs
WHERE upper(gs.INVALID_VALUE) = upper(cb.GENDER))
, 'U'),
cb.phone, cb.postcode, cb.city, cb.state, cc.custcatname
FROM a2custbris cb
NATURAL JOIN a2custcategory cc
WHERE cb.rowid IN (SELECT source_rowid FROM A2ERROREVENT where filterid = 7);