Добавить в select значение, если в столбце есть значение

Есть таблица tab:

id date state
001 2022-01-18 20:19:08.000 2
001 2022-10-18 20:19:08.000 1
001 2022-05-18 20:19:08.000 2
001 2022-07-18 20:19:08.000 2
001 2022-12-18 20:19:08.000 4
001 2022-02-18 20:19:08.000 2

Мне необходимо ранжировать данные по дате и это я сделал:

select
t.id,
t.date as startDate,
t.state
from tab t
Order by startDate

Проблема в том, что мне надо добавить в select еще одно значение, которого нет в таблице. При этом, если в tab.state есть хотя бы одна строка со значением 4, в select добавляется 'success' AS result а если нет ни в одной строке 4 - что-то вроде 'fail' AS result


Ответы (2 шт):

Автор решения: Alexander Petrov

Можно так:

select
  t.id,
  t.date as startDate,
  t.state,  
  case when exists (select 1 from tab where state = 4) then 'success' else 'fail' end as result
from tab t
order by startDate

Уточните диалект SQL.
Например, в T-SQL можно case заменить на iif, будет короче:

iif (exists(select 1 from tab where state = 4), 'success', 'fail') as result
→ Ссылка
Автор решения: Vitaliy Zlobin

Исходя из ТЗ, рекомендую завести переменную статуса и определить её перед выполнение основного запроса, а не вычислять значение для каждой строки таблицы:

DECLARE @status VARCHAR(10) = 'fail'

IF EXISTS (SELECT 1 FROM tab WHERE state = 4) SET @status = 'success'

SELECT  t.id,
        t.date as startDate,
        t.state,  
        @status as result
FROM tab t
ORDER BY startDate
→ Ссылка