Member 13276583 Ответов: 2

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


Политика код наименование затраты флаг зарплату .......ранг
1 Азбука 33. 100 null Null Null
2 DEF 45 Null Null Null. Нулевой
3 GHI 47 Null 50 Null Null
4 JKL 32 Null. Нуль-Нуль. Нулевой

Моя цель должна быть
Политика код наименование затраты флаг зарплату ..... ранг
2 DEF 45 Null. Нулевой. Null Null
3 JKL 32 Null. Нуль-Нуль. Нулевой

Рассмотрим мою исходную таблицу, содержащую 20k записей, и она имеет 30 столбцов здесь мне нужно получить представление цели, где все столбцы равны нулю, кроме первых 3 столбцов

Что я уже пробовал:

Я пробовал писать not null для всех имен столбцов, есть ли другой ярлык для этого сценария ?

2 Ответов

Рейтинг:
4

Wendelius

В то время как вы можете использовать COALESCE чтобы найти первое ненулевое значение, я на самом деле не вижу никаких проблем с IS NULL. Например, если вам нужно установить условия динамически, используя IS NULL структура может быть проще.

С помощью IS NULL запрос будет выглядеть примерно так

SELECT Id, name, Policy, cost, salary, flag, ..., rank
FROM TableName
WHERE cost IS NULL
AND   salary IS NULL
AND   flag IS NULL
...
AND   rank IS NULL

Однако если этот набор условий вам часто нужен, то вы можете рассмотреть возможность добавления вычисляемого поля в свою таблицу. Например, у вас может быть поле с именем AllItemsNull что может быть что-то вроде
ALTER TABLE TableName
ADD AllItemsNull AS CASE
                       WHEN COALESCE(cost, salary, flag, ..., rank) IS NULL THEN 1
                       ELSE 0
                    END

Теперь запрос для проверки того, все ли элементы являются нулевыми, может быть
SELECT Id, name, Policy, cost, salary, flag, ..., rank
FROM TableName
WHERE AllItemsNull = 1


ДОПОЛНЕНИЕ:
Ссылка, чтобы узнать больше о вычисляемых столбцах:
Указание вычисляемых столбцов в таблице | Microsoft Docs[^]


Рейтинг:
2

OriginalGriff

Попробуй:

SELECT ... FROM MyTable
WHERE COALESCE(col4, col5, col6, col7, ...) IS NULL


Kornfeld Eliyahu Peter

Для SQL до 2008 года он будет выполнять (и серьезно) форму "col4 IS NULL AND col5 IS NULL"...
Интересно, что "NOT (NOT col4 IS NULL OR NOT col5 IS NULL)" ничего не меняет. Оптимизатор переводит его в форму и...