Как проверить два разных условия для одного столбца в блоке INSERT INTO SELECT? - PullRequest
0 голосов
/ 28 октября 2019

база данных noob, поэтому, пожалуйста, потерпите меня. Запись в Oracle MySql.

У меня есть блок кода, который, в частности, предназначен для добавления строк в DWCUST, но изменяет недопустимые значения пола, поступающие из a2custbris, на действительные, сравнивая их с таблицей гендерного написания. Я написал код выбора в скобках, чтобы сделать это, и это работает. Тем не менее, некоторые значения пола равны нулю в a2custbris, я хочу, чтобы они были записаны как 'U' в DWCUST. Так как я могу сделать оба?

Вот код:

INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME, GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT dwcustSeq.nextval, cb.custid, Null, cb.fname, cb.sname, (select trim(gs.NEW_VALUE) FROM genderspelling gs WHERE upper(gs.INVALID_VALUE) = upper(cb.GENDER)), 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);

Любая помощь в создании приветствуется!

1 Ответ

1 голос
/ 28 октября 2019

Используйте выражение 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...