CASE Expression с T-SQL - PullRequest
       20

CASE Expression с T-SQL

2 голосов
/ 20 октября 2011

Я использую:

SELECT
  CASE SR.[ContainerId] WHEN SR.[ContainerId] IS NULL
    THEN 0
    ELSE 1
  END AS [IsSampleReceived]
FROM SomeTable SR where SomeCondition

Это не дает мне желаемого результата. IsSampleReceived всегда 1. Я не знаю почему, может быть, что-то не так в WHEN SR.[ContainerId] IS NULL.

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

Существует два формата использования CASE, и вы смешиваете их вместе.

Выражение CASE имеет два формата:

Простое выражение CASE сравнивает выражение снабор простых выражений для определения результата.

Найденное выражение CASE оценивает набор логических выражений для определения результата.

См. http://msdn.microsoft.com/en-us/library/ms181765.aspx

Вместопопробуйте:

select case 
        when SR.[ContainerId] is null
            then 0
        else 1
        end as [IsSampleReceived]
from SomeTable SR
where SomeCondition
3 голосов
/ 20 октября 2011

Почти! Вы смешивали две разные синтаксические формы:

SELECT CASE WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived]
FROM SomeTable SR where SomeCondition
1 голос
/ 20 октября 2011

Существует два вида операторов CASE: «простой» и «искомый».В вашем коде вы комбинируете эти два вида утверждений, и это дает неверные результаты.

Простой:

SELECT CASE SR.[ContainerId] WHEN NULL THEN 0 ELSE 1 END AS [IsSampleReceived]
FROM SomeTable SR where SomeCondition

Поиск:

SELECT CASE WHEN SR.[ContainerId] IS NULL THEN 0 ELSE 1 END AS [IsSampleReceived]
FROM SomeTable SR where SomeCondition

ВВаш исходный запрос выполняет простую версию, сравнивая значение SR. [ContainerId] со значением SR.[ContainerId] IS NULL.Результат этого сравнения всегда будет ложным, поэтому всегда было выбрано условие else.

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