Вы можете попробовать использовать агрегацию условий следующим образом:
SELECT CASE
WHEN MAX(DECODE(code, '1', 1)) = 1 AND MAX(DECODE(code, '2', 1)) = 1
THEN '100'
WHEN MAX(DECODE(code, '2', 1)) = 1 AND MAX(DECODE(code, '3', 1)) = 1
THEN '200'
WHEN MAX(DECODE(code, '5', 1)) = 1 AND MAX(DECODE(code, '7', 1)) = 1
THEN '300'
END AS asdasd
FROM TABLE
WHERE ID = 1;
DECODE()
- удобная функция Oracle, которая сравнивает выражение (code
) с сериейзначения и возвращает результаты соответственно.По сути, условие MAX(DECODE(code, '1', 1)) = 1
гарантирует, что хотя бы в одной строке есть code = '1'
.
PS: вы действительно храните числа в виде строк?Если code
- это тип данных числа, удалите одинарные кавычки в приведенном выше запросе.