#sql #sql-server #count #where-clause #sql-null
#sql #sql-сервер #количество #where-предложение #sql-null
Вопрос:
Каждая запись содержит 100 полей, лишь немногие из них имеют значения, а многие — нули. Если я хочу отобразить запись с полями, имеющими ненулевые значения, как мне это сделать?
Пример:
-
В таблице 1 100 полей, в одной записи в таблице 5 полей имеют ненулевые значения, 95 нулевых значений. Я хочу отобразить эту запись.
-
Другая запись, в которой 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
Обратите внимание, что второе решение требует, чтобы все столбцы имели один и тот же тип данных — в противном случае может потребоваться дополнительное приведение.