SQL-запрос, игнорируя все строки, которые имеют все нулевые столбцы

2

У меня есть запрос SQL Server, который должен подсчитывать количество возвращаемых строк, но мне нужно игнорировать строки, где все значения столбца NULL. Некоторые строки имеют значения NULL для некоторых столбцов, но это нормально. Мне просто нужно отфильтровать те, у которых есть ВСЕ значения NULL.

Сейчас я возвращаю все строки и используя SqlDataReader, итерацию возвращаемых строк и подсчет тем, которые мне нужны. Я хотел бы переместить это в сам запрос, если это возможно.

Спасибо!

EDIT: То, что я пытаюсь сделать, похоже на это, но мне, судя по всему, трудно заставить редактор VS SQL распознать, что я делаю:

SELECT COUNT(sd.[ID]) 
FROM [Some Data] sd 
WHERE sd.[Data Name] = 'something' AND ((sd.q1 IS NOT NULL) OR (sd.q2 IS NOT NULL)) 

и т.д..

  • 0
    Ваш код T-SQL не будет работать. Вы не указываете ИЛИ с помощью '||'. Но даже в этом случае вам нужно И, а не ИЛИ.
  • 0
    К сожалению, я знал это. В любом случае, я не хочу AND. Мне нужны результаты, чтобы следовать этому выражению. Я просто не знаю, как «сказать это» в SQL.
Теги:
sql-server

3 ответа

4
Лучший ответ
select count(id)
from [Some Data]
where not (Column1 is null and Column2 is null and Column3 is null ...)
  • 0
    Это похоже на работу! Благодарю.
1

Вы уже выбрали ответ, но это наиболее правильно, он должен быть самым быстрым, потому что SQL Engine может его оптимизировать и "коротко закоротить".

SELECT count(id)
FROM [Some Data]
WHERE NOT (COALESCE(Column1,Column2,Column3...) is null)
  • 0
    Я уверен, что SQL Server достаточно умен, чтобы замкнуть код в моем ответе - но ваш более лаконичен. Жаль, что я думал об этом: P
  • 0
    Я не уверен, я видел несколько случаев, когда SQL будет оценивать все элементы и операторы. Это особенно isnumber(col) and cast(col as int) = 1 когда у вас есть что-то вроде isnumber(col) and cast(col as int) = 1
1

Как насчет чего-то вроде этого:

Выберите Count (*) из MyTable Где Столбец1 НЕ НУЛЛ И Столбец2 НЕ НУЛЛ И Столбец3 НЕ НУЛЛ...

  • 0
    Это не будет работать, так как есть некоторые столбцы, которые имеют значение NULL, и я хочу сосчитать их, но не те, которые не все NULL. Смотрите мой недавний Edit как пример.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню