Возвращает 1 или 0 вместо значения или null в T-SQL

#sql #sql-server #tsql

Вопрос:

В своем SELECT заявлении я присоединяюсь к двум таблицам. Возможно, что нет соответствующего значения Table2 , и в этом случае мое SELECT заявление должно вернуться NULL для этой колонки. Что я хочу сделать, так это то, что вместо возврата фактического значения, полученного от Table2 , я хочу вернуть 1.

Я думал, что мог бы использовать ISNULL для этого, но эта функция предназначена для возврата фактического значения, если оно существует.

Вот как SELECT выглядит мое заявление:

 SELECT a.Id, ISNULL(b.PersonId, 0)
FROM Table1 AS a
   LEFT OUTER JOIN Table2 AS b ON a.Id = b.Id
 

Здесь PersonId столбец имеет UNIQUEIDENTIFIER тип, и я не хочу возвращать ни a Guid , ни 0. Вместо этого я хотел бы вернуть 1 или 0.

Как я могу справиться с этим сценарием?

Ответ №1:

Я думаю, что вы ищете CASE EXPRESSION здесь.

 SELECT a.Id, CASE WHEN b.PersonId IS NOT NULL THEN 1 ELSE 0 END
FROM Table1 AS a
LEFT OUTER JOIN Table2 AS b ON a.Id = b.Id
 

Ответ №2:

Помимо отличного ответа @DaleK, используется еще один вариант EXISTS

 SELECT
    a.Id,
    CASE WHEN EXISTS (SELECT 1
        FROM Table2 AS b
        WHERE a.Id = b.Id)
     THEN 1 ELSE 0 END
FROM Table1 AS a
 

Обратите внимание, что семантика здесь другая, так как это полу-соединение: строки не дублируются, если в Table2