Проверка различных значений на уровне столбца - PullRequest
1 голос
/ 08 апреля 2019

У меня есть четыре столбца из моего запроса. Мое требование - проверить, отличаются ли значения всех столбцов, а затем выбрать только результат.

Я написал этот запрос, и он работает нормально. Но мне было просто интересно, есть ли лучший или быстрый способ добиться этого

select FO, AFO, CO, ACO from mytable 
where 
(fo<>afo or (fo is null or afo is null))
and 
(fo<>co or (fo is null or co is null))
and 
(fo<>aco or (fo is null or aco is null))
and 
(afo<>co or (afo is null or co is null)) 
and 
(afo<>aco or (afo is null or aco is null))
and 
(co<>aco or (co is null or aco is null))

1 Ответ

1 голос
/ 08 апреля 2019

Хммм. , , Вы, кажется, хотите, чтобы четыре значения были разными или NULL. Другой метод использует apply:

select t.*
from mytable t cross apply
     (select count(*)
      from (values (t.afo), (t.fo), (t.co), (t.aco)
           ) v(val)
      where val is not null
      having count(*) = count(distinct val)
     ) x;

При этом удаляются значения NULL, а затем проверяется, все ли остальные различны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...