Возврат максимального количества ненулевых столбцов из таблицы - PullRequest
1 голос
/ 29 мая 2020

У меня есть таблица с 4 столбцами, один из которых является ненулевым столбцом, всем остальным можно дать нулевое значение. Мне просто нужен SELECT, который возвращает результаты с максимально возможным количеством ненулевых столбцов. Например: если в моей таблице 5 записей, в одной из этих записей будет 3 столбца с данными, в 2 из них будет 2 столбца с данными, а в 2 из них будет только 1 столбец с данными. В моем выборе я хочу в результате только первый вариант: принести мне 3 столбца с данными. Но это может быть всего 2 столбца с данными, это будет динамический c в соответствии с таблицей, которая будет обновляться.

Я использую Oracle SQL.

1 Ответ

0 голосов
/ 29 мая 2020

Один из вариантов - это условная сортировка, основанная на количестве не- null значений в каждой строке, а затем предложение, ограничивающее строку (доступно с Oracle 12 c). Предполагая, что 3 столбца, допускающие значение NULL: col1, col2 и col3, это будет:

select *
from mytable
order by
      case when col1 is null then 0 else 1 end
    + case when col2 is null then 0 else 1 end
    + case when col3 is null then 0 else 1 end desc
fetch first row with ties

Если вы используете старую версию Oracle, вы можете получить тот же результат с оконной функцией rank():

select *
from (
    select 
        t.*,
        rank() over(order by
              case when col1 is null then 0 else 1 end
            + case when col2 is null then 0 else 1 end
            + case when col3 is null then 0 else 1 end desc
        ) rn
    from mytable t
) t
where rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...