Вы можете сложить результат нескольких выражений регистра, по одному на каждый столбец, который вы хотите проверить:
-- CTE for sample data
with your_table (Indiv_id, Trip_band, Fav1, Fav2, Fav3, Fav4, Fav5 ) as (
select 1234, '0-90', 386568, null, null, null, 568889 from dual
union all
select 5678, '91-180', null, 889546, 887456, 856234, null from dual
)
-- actual query
select t.*,
case when fav1 is null then 1 else 0 end
+ case when fav2 is null then 1 else 0 end
+ case when fav3 is null then 1 else 0 end
+ case when fav4 is null then 1 else 0 end
+ case when fav5 is null then 1 else 0 end
as null_count
from your_table t;
INDIV_ID TRIP_B FAV1 FAV2 FAV3 FAV4 FAV5 NULL_COUNT
---------- ------ ---------- ---------- ---------- ---------- ---------- ----------
1234 0-90 386568 568889 3
5678 91-180 889546 887456 856234 2
или можете использовать специфичную для Oracle nvl2()
функцию :
select t.*,
nvl2(fav1, 0, 1)
+ nvl2(fav2, 0, 1)
+ nvl2(fav3, 0, 1)
+ nvl2(fav4, 0, 1)
+ nvl2(fav5, 0, 1)
as null_count
from your_table t;
INDIV_ID TRIP_B FAV1 FAV2 FAV3 FAV4 FAV5 NULL_COUNT
---------- ------ ---------- ---------- ---------- ---------- ---------- ----------
1234 0-90 386568 568889 3
5678 91-180 889546 887456 856234 2
, но выражения падежа мне понятнее.
Нет встроенной функции, которую можно было бы применить ко всем столбцам в строке одновременно, хотя вам необходимопроверьте их все индивидуально.(Полагаю, вы могли бы отменить, посчитать и повернуть назад - но это большая дополнительная работа, и вам все равно нужно перечислить столбцы ...)