Как выбрать только те строки, в которых один столбец может иметь нулевые или ненулевые значения для одного и того же идентификатора

#sql #sql-server #select

Вопрос:

Может ли кто-нибудь, пожалуйста, помочь мне выбрать только строки, которые не имеют нулевого значения столбца, где этот столбец может иметь нулевые или ненулевые значения для одного и того же идентификатора

У меня есть такой столик

введите описание изображения здесь

Мне нужен такой результат, как этот

введите описание изображения здесь

Комментарии:

1. тот же идентификатор , означает ли это то же col1 значение?

2. Вы имеете в виду, что если есть запись без нулевого значения, то она выбирается, но если только ull, то нулевая тоже в порядке?

3. Следует ли также учитывать нули col2 и col3?

4. @Whencesever да , если есть значение null и значение, то следует выбрать значение один, если есть только значение null, то следует выбрать значение null

5. Каковы типы данных других столбцов (нет col1 )? Все ли они одинаковы? Публикация ваших данных в удобном для использования формате ( не изображений) значительно поможет нам помочь вам.

Ответ №1:

Ваше описание не очень понятно. Если я правильно понимаю ваше требование, вам нужно только 1 строка на каждую col1 . Выберите строку с наибольшим ненулевым значением ?

 select *
from
(
    select *, rn = row_number() over (partition by col1
                                      order by case when col2 is not null then 1 else 0 end
                                               case when col3 is not null then 1 else 0 end
                                               case when col4 is not null then 1 else 0 end 
                                      desc)
    from   a_table
) d
where rn = 1