Использование sql - не равно NULL в операторе выбора
Я не могу понять, как использовать противоположность isnull или ifnull утверждений в SQL. Мне нужно сказать, если a.Error1
не является нулевым - тогда напечатайте ' - '
и + CHAR(13)+CHAR(10)
, По сути, не должно быть тире или переноса строки, если a.Error1 возвращается в ноль. Так что печатайте информацию, если поле не пустое.
select a. ....
' - ' + a.Error1 + CHAR(13)+CHAR(10) +
' - ' + a.Error2 + CHAR(13)+CHAR(10) +
' - ' + a.Error3 + CHAR(13)+CHAR(10) +
' - ' + a.Error4 + CHAR(13)+CHAR(10) +
' - ' + a.Error5 + CHAR(13)+CHAR(10) +
' - ' + a.Error6 as 'error_message'
...
from table1 a
Например, если для заданной записи error1, 2 и 5 возвращен вывод, я бы хотел, чтобы вывод был следующим:
- Ошибка1: было...
- Ошибка2:....
- Ошибка5: данные были...
Если в этой строке не было ошибок, это должно быть просто пустое / пустое поле.
3 ответа
Ты можешь использовать CASE
:
SELECT a. ....
(CASE WHEN a.Error1 IS NOT NULL
THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10)
ELSE ''
END) +
(CASE WHEN a.Error2 IS NOT NULL
THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10)
ELSE ''
END) +
(CASE WHEN a.Error3 IS NOT NULL
THEN ' - ' + a.Error3 + CHAR(13)+CHAR(10)
ELSE ''
END) +
...etc
Да! Я знаю, что опоздал примерно на 5 лет, но я тоже затронул эту проблему.
Странно, что не существует какой-то!ISNULL(), да какой угодно.
Попробуйте это для более чистого кода:
select a. ....
IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error1,
IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error2
from table1 a
Дополнительные сведения о функции IIF(): функция SQL Server IIF
Функция COALESCE делает то, что вы хотите здесь. Результатом COALESCE является первое значение NOT NULL, которое оно передало. Ниже мы используем '', который отличается от NULL, так что внешний + всегда применяется к строкам NOT NULL.
например
select a. ....
COALESCE( ' - ' + a.Error1 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error2 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error3 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error4 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error5 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error6 , '' ) as 'error_message'
...
from table1 a
SELECT (CASE WHEN a.Error1 IS NOT NULL
THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) +
ELSE a.Error1
END) +
(CASE WHEN a.Error2 IS NOT NULL
THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) +
ELSE a.Error2
END) +
.....etc