2016-06-25 1 views

ответ

1
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; 
0

Вам не нужно учитывать записи. Просто сделайте только один запрос:

select distinct status from t_table where file_id = 310012 

Когда запрос возвращал несколько строк, то х должно быть <> 0
Если запрос возвращает пустой результирующий набор, то х должен быть равен 0, и вы получите второй часть if x <> 0 then ..... else return x
В качестве бонуса вы получаете более высокую скорость обработки, потому что вы запускаете только один запрос к таблице, а не два.

1

Вы можете делать то, что вы хотите с 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 - это строка.