Вы не опубликовали описание таблицы, поэтому - для меня - это выглядит подозрительно:
MAX (TO_NUMBER (delinq_status)) AS delinq_status,
Если бы DELINQ_STATUS
тип данных столбца был NUMBER
, вам бы не пришлось TO_NUMBER
его,Если это VARCHAR2
, то кто-то мог ввести в него 'ABC1234', что приведет к сбою функции TO_NUMBER
.
Итак, если вы запустите это, каков результат?
select max(to_number(delinq_status)) from master_copy
Начиная с пропущенных одинарных кавычек в CASE
: идентификатор зависит от содержимого столбца.Если это «число», одинарные кавычки не нужны, хотя тип данных столбца VARCHAR2
(но это будет хорошая практика ; с другой стороны, если столбец содержит только числа, почему это не тип данных NUMBER
?):
SQL> create table test (zero_bal_code varchar2(1));
Table created.
SQL> insert into test values ('1');
1 row created.
SQL> select case when zero_bal_code in (3) then 'default_foreclosure'
2 else 'unknown'
3 end loan_type
4 from test;
LOAN_TYPE
-------------------
unknown
Однако, если есть что-то отличное от «чисел», то одинарные кавычки имеют значение:
SQL> insert into test values ('B');
1 row created.
SQL> select case when zero_bal_code in (3) then 'default_foreclosure'
2 else 'unknown'
3 end loan_type
4 from test;
ERROR:
ORA-01722: invalid number
no rows selected
SQL> select case when zero_bal_code in ('3') then 'default_foreclosure'
2 else 'unknown'
3 end loan_type
4 from test;
LOAN_TYPE
-------------------
unknown
unknown
SQL>
Кстати, то, что вы написали, не имеет особого смысла;коды для с предоплатой, default_reo и active действительно 1
?Все они?Как вы будете различать, что есть что?
CASE
WHEN (zero_bal_code IN (3)) THEN 'default_foreclosure'
WHEN (zero_bal_code IN (1)) THEN 'prepaid'
WHEN (zero_bal_code IN (1)) THEN 'default_reo'
WHEN (zero_bal_code IN (1)) THEN 'active'
END