SQL Server: как вернуть Да или Нет, если вложенный запрос имеет результат или нет

У меня есть хранимая процедура с вложенным запросом, который проверяет, "category"из основной таблицы соответствует"category"в под-таблице. Таким образом, может быть либо одно совпадение, либо ни одного.

Может кто-нибудь сказать мне, как я могу вернуть Да, если есть совпадение, и подзапрос возвращает что-то, и Нет, если нет совпадения, и подзапрос ничего не возвращает?

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

Мой SQL (сокращенно):

SELECT      A.categoryID,
            A.category,
            A.[description],
            (
                SELECT      'Yes' AS subscribed
                FROM        MOC_Categories_Subscribers D
                WHERE       D.category = A.category
                FOR XML PATH(''), ELEMENTS, TYPE
            )
FROM        MOC_Categories A

Большое спасибо за любую помощь в этом, Тим.

3 ответа

Решение

Если подзапрос не возвращает никаких строк, тогда ваш результат будет NULL. Таким образом, вы должны проверить это. В SQL Server вы можете сделать это с помощью функций ISNULL а также COALESCE, это зависит от версии, которую вы используете

SELECT A.categoryID,
       A.category,
       A.[description],
       COALESCE((SELECT TOP 1 'Yes'
                 FROM MOC_Categories_Subscribers D
                 WHERE D.category = A.category), 'No') AS Result
FROM MOC_Categories A
SELECT      A.categoryID,
            A.category,
            A.[description],
            (
                SELECT      
                case 
                   when count(subscribed) > 0 then 'Yes'
                   else 'No'
                end
                FROM        MOC_Categories_Subscribers D
                WHERE       D.category = A.category
            )
FROM        MOC_Categories A

Вы можете использовать outer join, который возвращает null значения, если нет совпадения. Объединить с case преобразовать в значение да / нет:

SELECT  A.categoryID,
        A.category,
        A.[description],
        subscribed = CASE
           WHEN D.category IS NOT NULL THEN 'Yes'
           ELSE 'No'
           END,
FROM        MOC_Categories A
LEFT OUTER JOIN MOC_Categories_Subscribers D
   ON D.category = A.category
Другие вопросы по тегам