2016-11-11 4 views
2

Table structure and valuesКак написать, где можно приравнять двух столбцов содержит как NULL и пустые значения

Учитывая мой структуры таблицы, теперь мне нужно написать запрос для сравнения «STRVAL1 и STRVAL2», затем «BVAL1 и BVAL2» , если оба они не совпадают, то эта строка должна быть возвращена.

Ожидаемый результат ...

enter image description here

Пожалуйста, используйте сильфона скрипт для данных

DECLARE @TAB TABLE (ID INT, STRVAL1 VARCHAR(8), STRVAL2 VARCHAR(8), BVAL1 BIT, BVAL2 BIT) 

    INSERT INTO @TAB VALUES 
     (1, NULL, NULL, NULL, NULL) 
    , (2, '', NULL, NULL, NULL) 
    , (3, '', '', NULL, NULL) 
    , (4, 'VAL', 'VAL', NULL, NULL) 
    , (5, 'VAL1', 'VAL2', NULL, NULL) 
    , (6, NULL, NULL, 0, NULL) 
    , (7, NULL, NULL, 0, 0) 
    , (8, NULL, NULL, 1, 1) 
    , (9, NULL, NULL, 1, 0) 

    SELECT ID, STRVAL1, STRVAL2, BVAL1, BVAL2 
    FROM @TAB 
+1

Что-то, как с помощью ISNULL (Field, «») <> «» – ThatChris

+0

@Christopher - это думает о ISNULL и COALESCE - но что, если не нулевая сторона содержит свое альтернативное значение - если вы COALESCE к ' N/A ', это идет не так, если вы comapre к' N/A '- плюс другой - бит поле – Cato

ответ

4

Вы можете просто использовать сравнения, хотя NULL s сделать это немного громоздким:

select t.* 
from @tab t 
where ((strval1 <> strval2) or 
     (strval1 is null and strval2 is not null) or 
     (strval1 is not null and strval2 is null) 
    ) or 
     ((bval1 <> bval2) or 
     (bval1 is null and bval2 is not null) or 
     (bval1 is not null and bval2 is null) 
    ); 
0

Вам понадобится комбинация по испытаниям.

select ... from ... where 
(strval1 is null and strval2 is not null) or 
(strval1 is not null and strval2 is null) or 
(strval1 != strval2) or 
(bval1 is null and bval2 is not null) or 
(bval1 is not null and bval2 is null) or 
(bval1 != bval2)