Мне нужно отфильтровать строки в таблице SQL, в которой есть значения в одном столбце, которые находятся в указанном списке значений.Упрощенная таблица выглядит примерно так: (извините за плохое форматирование, здесь никогда раньше не публиковалось)
Error Codes | Other Column 1 | Other Column 2 ...
--------------------------------------------------
F010,F123,F345, | ...... | .....
F231,FC85,F904, | ...... | .....
FC432,F0425,NA, | ...... | .....
....
Сначала я разделил столбец Коды ошибок, чтобы получить каждый из 3 кодов ошибок, представляющих собой строку, разделенную запятой.ценностей.Затем мне нужно отфильтровать строки со всеми тремя кодами ошибок в данном списке, например («F010», «FC542», «FB943»).Я выполняю это в базе данных Teradata, это часть запроса, но, похоже, не отфильтровываются все комбинации в списке:
SELECT ... ,
CASE
WHEN ( substr(a.error_code, 1, position(',' in a.error_code)-1) in ('F010', 'FC542', 'FB012' 'FB943', 'NA')
AND substr(a.error_code,
position(',' in a.error_code)+1,
position(',' in substr(a.error_code, position(',' in a.error_code)+1, Characters(a.error_code)-position(',' in a.error_code)))-1) in ('F010', 'FC542', 'FB012' 'FB943', 'NA')
AND substr(a.error_code,
position(',' in a.error_code) + position(',' in substr(a.error_code, position(',' in a.error_code)+1, Characters(a.error_code)-position(',' in a.error_code)))+1,
Characters(a.error_code)-(position(',' in a.error_code) + position(',' in substr(a.error_code, position(',' in a.error_code)+1, Characters(a.error_code)-position(',' in a.error_code))))-1) in ('F010', 'FC542', 'FB012' 'FB943', 'NA') )
THEN 'No'
ELSE 'Yes'
end Error_Module,
...
FROM Error_code_table a
WHERE Error_Module = 'Yes'
В качестве стороны, функция Characters ()так же, как длина ().
Спасибо, Майк