我在以下结构中有一个表格
{col_a1, .. ,Col_a15, Continuous_count}
这些列可能具有NULL或特定值(在col_a1到col_a15中)。
我需要查找最连续的数据集,并将计数保留在continuous_count
列中。例如:
Columns: col_a1 col_a2 col_a3 col_a4 col_a5 col_a6 col_a7 Continuous_count ROW_1: NULL NULL 2 2 3 NULL 2 3 ROW_2: NULL 1 2 2 3 NULL 2 4 ROW_3: NULL NULL NULL 2 3 NULL 2 2 ROW_4: 2 1 2 2 3 NULL 2 5
我无法编写查询,我写了一个,但看起来太大了很多ifs和其他的。是否有一种简单的方法可以做到这一点。
答案 0 :(得分:1)
我看到的唯一方法是检查相邻列的所有组合。
我使用下面的power(1,col_ax)
为任何值获取1,为null获取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;