Использование 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
Другие вопросы по тегам