Как достичь этого с помощью SQL case statement?SQL - выбор операторов в случае
select count(*) x from t_table where file_id = 310012;
if x<>0 : select distinct status from t_table where file_id = 310012
else : return x
Как достичь этого с помощью SQL case statement?SQL - выбор операторов в случае
select count(*) x from t_table where file_id = 310012;
if x<>0 : select distinct status from t_table where file_id = 310012
else : return x
See the code below:
SELECT CASE COUNT(*)
WHEN COUNT(*) > 0 THEN
(SELECT status FROM t_table WHERE file_id = 310012)
ELSE null END AS x
FROM t_table WHERE file_id = 310012;
Вам не нужно учитывать записи. Просто сделайте только один запрос:
select distinct status from t_table where file_id = 310012
Когда запрос возвращал несколько строк, то х должно быть <> 0
Если запрос возвращает пустой результирующий набор, то х должен быть равен 0, и вы получите второй часть if x <> 0 then ..... else return x
В качестве бонуса вы получаете более высокую скорость обработки, потому что вы запускаете только один запрос к таблице, а не два.
Вы можете делать то, что вы хотите с union all
:
select distinct status
from t_table
where file_id = 310012
union all
select 0
from dual
where not exists (select 1 from t_table where tile_id = 320023);
Однако, возвращая одну строку с 0
кажется плохой идеей, потому что это может быть перепутан со значением status
.
Примечание: вы должны использовать '0'
, если status
- это строка.
Возможно, вам это понадобится, –
Ruhaan