Добавить в 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