Выражение CASE, возвращающее значение NULL - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь получить статус своих билетов, используя выражение регистра. Работает отлично, но не возвращает Not Available. Вместо этого он возвращает нулевое значение в статусе как результат.

Что не так с этим запросом?

Во-вторых, могу ли я сделать дальше, если еще по возвращении операций?

Select 
Case 
      When Status=1 and isTaken=1 then 'Open'
      When Status=4 and isTaken=0 then 'Expire'
      When Status=2 and isTaken=0 then 'Pending'
      When Status=0 and isTaken=0 then 'Close'

Else 'Not Available' End As 'Status' 
from Tickets 
Where Id='1234567890'

Проверьте изображение для более подробного объяснения.

enter image description here

1 Ответ

0 голосов
/ 04 мая 2018

Ваш запрос не возвращает NULL, он возвращает 0 строк. Ваш WHERE фильтрует строки или ваша таблица пуста.

Удалите WHERE и посмотрите, возвращает ли он строки, чтобы убедиться, что таблица не пуста. Если так, то убедитесь, что ваш ID фильтр правильный.

Если вы хотите вернуть строку, даже если фильтр ничего не находит, вам нужно NOT EXISTS или LEFT JOIN:

DECLARE @ID VARCHAR(20) = '1234567890'

SELECT
    F.ID,
    Case 
        When Status=1 and isTaken=1 then 'Open'
        When Status=4 and isTaken=0 then 'Expire'
        When Status=2 and isTaken=0 then 'Pending'
        When Status=0 and isTaken=0 then 'Close'
    Else 'Not Available' End As 'Status' 
FROM
    (VALUES (@ID)) AS F(ID)
    LEFT JOIN Tickets AS C ON F.ID = C.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...