У меня есть запрос, который я пишу, который проверяет поле идентификатора и выводит номер идентификатора из этого столбца на основе нескольких критериев. Теперь, когда у меня написана логика, я хочу выполнить запрос по каждому критерию, чтобы проверить, работает ли логика. Итак, последняя часть моего запроса для этого выглядит следующим образом:
FROM TABLE1
WHERE SOURCE_SYSTEM_NM = 'XYZ' AND ((STRLEFT(SOURCE_ARRANGEMENT_ID,4)) NOT IN ('23CC','21CC'))
LIMIT 10000
По сути, я пытаюсь сделать так, чтобы он возвращал мне только элементы с SOURCE_SYSTEM_NM, равными 'XYZ', при этом исключая любые элементы с SOURCE_ARRANGEMENT_ID, не имеющие первых 4 символов, равных '21CC' или '23CC'. У меня есть и третий критерий, по которому я хочу отфильтровать: первые три символа должны быть 0CC.
Моя проблема, когда я запускаю это, я получаю ошибку «Неверная позиция». Я удалил одну из строк из критериев, и она работает. Итак, я решил добавить второе в его собственное предложение «НЕ В ...» с AND между ними, но это привело к той же ошибке.
Если бы мне пришлось угадывать, NOT IN ('21CC','23CC')
ставит между ними AND, и я думаю, что это должно быть корнем моей проблемы. Критерии в моей инструкции CASE выводят идентификационный номер со следующим:
WHEN (M_CRF_CU_PRODUCT_ARRANGEMENT.SOURCE_SYSTEM_NM) IN ('XYZ') AND STRLEFT(SOURCE_ARRANGEMENT_ID, 4) IN ('23CC','21CC') THEN STRRIGHT(SOURCE_ARRANGEMENT_ID, LENGTH(SOURCE_ARRANGEMENT_ID)-4)
WHEN (M_CRF_CU_PRODUCT_ARRANGEMENT.SOURCE_SYSTEM_NM) IN ('XYZ') AND STRLEFT(SOURCE_ARRANGEMENT_ID, 3) IN ('0CC') THEN STRRIGHT(SOURCE_ARRANGEMENT_ID, LENGTH(SOURCE_ARRANGEMENT_ID)-3)
WHEN (M_CRF_CU_PRODUCT_ARRANGEMENT.SOURCE_SYSTEM_NM) IN ('XYZ') AND (STRLEFT(SOURCE_ARRANGEMENT_ID, 4) NOT IN ('23CC','21CC') OR STRLEFT(SOURCE_ARRANGEMENT_ID, 3) NOT IN ('0CC')) THEN (SOURCE_ARRANGEMENT_ID)
Итак, я просто пытаюсь проверить каждый критерий, чтобы убедиться, что полученный / созданный идентификатор правильный. Мне нужно отфильтровать, чтобы получить результаты для последнего утверждения WHEN выше, но в конце я продолжаю получать эту «Неверную позицию» в своем выражении WHERE. Я использую Aginity для выполнения этого запроса, и он работает с базой данных IBM Netezza. Заранее спасибо!