как выполнить sql запись из файла, который имеет ненулевые значения в своих полях

#sql #sql-server #count #where-clause #sql-null

#sql #sql-сервер #количество #where-предложение #sql-null

Вопрос:

Каждая запись содержит 100 полей, лишь немногие из них имеют значения, а многие — нули. Если я хочу отобразить запись с полями, имеющими ненулевые значения, как мне это сделать?

Пример:

  1. В таблице 1 100 полей, в одной записи в таблице 5 полей имеют ненулевые значения, 95 нулевых значений. Я хочу отобразить эту запись.

  2. Другая запись, в которой 100 полей обнуляются, я не хочу отображать эту запись.

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

1. SQL-запросы, он ничего не отображает. Клиентское приложение должно решить, что отображать, а что нет.

2. Используйте предложение WHERE. Действительно большое предложение WHERE…

3. Невозможно обойти указание каждого столбца в WHERE предложении запроса. Единственным способом добиться этого менее болезненным может быть динамическое генерирование инструкции SQL в виде строки.

4. Если вам нужно только специальное решение, вы можете запросить таблицу с помощью Excel (с SELECT * FROM ), а затем получить формулу в столбце Excel, которая выводит TRUE или FALSE на основе некоторого интеллектуального условия.

5. SQL не очень хорош в этом. Если это проблема не одноразового использования, а часть бизнес-логики, вы можете добавить в свою таблицу дополнительный столбец, содержащий эту дополнительную информацию (логическое значение, указывающее на наличие ненулевых столбцов, или числовое значение для хранения количества ненулевых столбцов).

Ответ №1:

Вам нужны записи, в которых есть не все столбцы null . Вам нужно будет перечислить имена столбцов. Наиболее простым решением является длинное where предложение, например:

 select *
from mytable 
where col1 is not null or col2 is not null or ... or colN is not null;
  

Альтернативой является боковое соединение:

 select t.*
from mytable
cross apply (
    select count(col) cnt
    from (values (col1), (col2), ... (colN)) as x(col)
) x
where x.cnt > 0
  

Обратите внимание, что второе решение требует, чтобы все столбцы имели один и тот же тип данных — в противном случае может потребоваться дополнительное приведение.