Единственный способ, который я вижу, - проверить все комбинации соседних столбцов.
Я использую power(1,col_ax)
, чтобы получить 1 для любого значения и null для null. При добавлении комбинации, имеющие хотя бы один нулевой результат в null (и, следовательно, в 0 для использования NVL, потому что иначе GREATEST приведет к null).
select mytable.*,
greatest
(
nvl(power(1,col_a1), 0),
nvl(power(1,col_a1) + power(1,col_a2), 0),
nvl(power(1,col_a1) + power(1,col_a2) + power(1,col_a3), 0),
nvl(power(1,col_a1) + power(1,col_a2) + power(1,col_a3) + power(1,col_a4), 0),
nvl(power(1,col_a1) + power(1,col_a2) + power(1,col_a3) + power(1,col_a4) + power(1,col_a5), 0),
nvl(power(1,col_a1) + power(1,col_a2) + power(1,col_a3) + power(1,col_a4) + power(1,col_a5) + power(1,col_a6), 0),
nvl(power(1,col_a1) + power(1,col_a2) + power(1,col_a3) + power(1,col_a4) + power(1,col_a5) + power(1,col_a6) + power(1,col_a7), 0),
nvl(power(1,col_a2), 0),
nvl(power(1,col_a2) + power(1,col_a3), 0),
nvl(power(1,col_a2) + power(1,col_a3) + power(1,col_a4), 0),
nvl(power(1,col_a2) + power(1,col_a3) + power(1,col_a4) + power(1,col_a5), 0),
nvl(power(1,col_a2) + power(1,col_a3) + power(1,col_a4) + power(1,col_a5) + power(1,col_a6), 0),
nvl(power(1,col_a2) + power(1,col_a3) + power(1,col_a4) + power(1,col_a5) + power(1,col_a6) + power(1,col_a7), 0),
nvl(power(1,col_a3), 0),
nvl(power(1,col_a3) + power(1,col_a4), 0),
nvl(power(1,col_a3) + power(1,col_a4) + power(1,col_a5), 0),
nvl(power(1,col_a3) + power(1,col_a4) + power(1,col_a5) + power(1,col_a6), 0),
nvl(power(1,col_a3) + power(1,col_a4) + power(1,col_a5) + power(1,col_a6) + power(1,col_a7), 0),
nvl(power(1,col_a4), 0),
nvl(power(1,col_a4) + power(1,col_a5), 0),
nvl(power(1,col_a4) + power(1,col_a5) + power(1,col_a6), 0),
nvl(power(1,col_a4) + power(1,col_a5) + power(1,col_a6) + power(1,col_a7), 0),
nvl(power(1,col_a5), 0),
nvl(power(1,col_a5) + power(1,col_a6), 0),
nvl(power(1,col_a5) + power(1,col_a6) + power(1,col_a7), 0),
nvl(power(1,col_a6), 0),
nvl(power(1,col_a6) + power(1,col_a7), 0),
nvl(power(1,col_a7), 0),
0
) as continous_count
from mytable;
Необходимость сделать это, вероятно, указывает на то, что они предназначены как строки, а не столбцы ... Тогда будет достаточно простого 'count (*)'. – Ben
, например, в вашей таблице, вам нужно отобразить только «ROW_4' –
. На основе count я получаю столбец constant_count, который является последним столбцом. Я не могу просто взять счетчик (*), потому что он вернет все ненулевые столбцы. Я этого не хочу. – vik123