#case #exists
Вопрос:
Я пытаюсь сравнить строки с одинаковым значением в одном столбце, в дополнение к этому мне нужно использовать несколько условий «КОГДА-ТОГДА-ЕЩЕ».
Допустим, у меня есть:
Идентификатор результата | Правило |
---|---|
123 | 0 |
123 | 1135 |
111 | 0 |
222 | 1135 |
333 | 1135 |
333 | 2040 |
333 | 3588 |
555 | 1135 |
555 | 1135 |
1-е условие, если result_ID=Result_ID и правило = 0, ТО «Вручную»
2-е условие, если result_ID=Result_ID и правило = ТОЛЬКО для значения 1135, ТО «Сбой»
3-е условие, если result_ID=Result_ID и Правило = 1135 ИЛИ ЛЮБОЕ ДРУГОЕ ПРАВИЛО (кроме 0), ТО «Передано»
Это должно быть так:
Идентификатор результата | Правило | Результат |
---|---|---|
123 | 0 | Инструкция |
123 | 1135 | Инструкция |
111 | 0 | Инструкция |
222 | 1135 | Неудачный |
333 | 1135 | Пройденный |
333 | 2040 | Пройденный |
333 | 3588 | Пройденный |
555 | 1135 | Неудачный |
555 | 1135 | Неудачный |
У меня есть:
SELECT CASE WHEN EXISTS (
SELECT *
FROM Table A2
WHERE A2.Result_ID=A.Result_ID
AND RULE_ID =0
) THEN 'Manual'
WHEN EXISTS (
SELECT *
FROM Table A2
WHERE A2.Result_ID=A.Result_ID
AND RULE_DETAIL_ID =1135
) THEN 'Failed'
ELSE 'Passed' end as ABC
FROM ....
Но это не совсем правильный результат, который я получаю. И для загрузки данных требуется время, может быть, я смогу как-то упростить этот запрос?
Спасибо вам за вашу помощь.