Пример SQL запроса для склонения слова «ошибка» для вывода количества ошибок: «Найдена 1 ошибка»; «Найдено 3 ошибки»; «Найдено 5 ошибок» :
select val ,case when mod(val,10) between 2 and 4 then 'Найдено '||val||' ошибки' when val between 11 and 14 or mod(val,10) between 5 and 9 or mod(val,10) = 0 then 'Найдено '||val||' ошибок' when mod(val,10) = 1 then 'Найдена '||val||' ошибка' end str from ( select level val from dual connect by level<=25 ) VAL STR ---------- ------------------------------------------------------- 1 Найдена 1 ошибка 2 Найдено 2 ошибки 3 Найдено 3 ошибки 4 Найдено 4 ошибки 5 Найдено 5 ошибок 6 Найдено 6 ошибок 7 Найдено 7 ошибок 8 Найдено 8 ошибок 9 Найдено 9 ошибок 10 Найдено 10 ошибок 11 Найдено 11 ошибок 12 Найдено 12 ошибки 13 Найдено 13 ошибки 14 Найдено 14 ошибки 15 Найдено 15 ошибок 16 Найдено 16 ошибок 17 Найдено 17 ошибок 18 Найдено 18 ошибок 19 Найдено 19 ошибок 20 Найдено 20 ошибок 21 Найдена 21 ошибка 22 Найдено 22 ошибки 23 Найдено 23 ошибки 24 Найдено 24 ошибки 25 Найдено 25 ошибок 25 rows selected
В case первые два условия необходимо переставить местами, иначе получается «Найдено 12 ошибки» (и так до 14):
select
val,
case when val between 11 and 14 or mod(val,10) between 5 and 9
or mod(val,10) = 0 then ‘Найдено ‘||val||’ ошибок’
when mod(val,10) between 2 and 4 then ‘Найдено ‘||val||’ ошибки’
when mod(val,10) = 1 then ‘Найдена ‘||val||’ ошибка’
end str
from ( select level val from dual connect by level<=25 )
Сорри, с форматированием запроса некрасиво как-то вышло…