Всегда выбирайте строку sql - PullRequest
0 голосов
/ 09 августа 2011

У меня есть отметка case (см. Ниже), но я всегда хочу вернуть значение, даже если ничто не соответствует выражению WHERE.Это возможно?Спасибо

SELECT 
    CASE 
        WHEN COUNT(*) > 10 THEN 1
        ELSE 0
    END
FROM 
fldt_QueryDSLAM lastDay
WHERE AccountID = @acc
    AND lastDay.DSL = @dsl
GROUP BY lastDay.DSL

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Если предложение WHERE возвращает одну строку (или, точнее, одну группу), удалите GROUP BY.Тогда у вас всегда будет одна строка в выводе.

Я предполагаю, что это будет (возврат одной группы), потому что у вас есть GROUP BY в столбце фильтра, а AccountID не упоминается ни в SELECT, ни в GROOUP BY

SELECT 
    CASE 
        WHEN COUNT(*) > 10 THEN 1
        ELSE 0
    END
FROM 
    fldt_QueryDSLAM lastDay
WHERE
    AccountID = @acc AND lastDay.DSL = @dsl

Почему, смотритеthis: Всегда ли COUNT (*) возвращает результат?

1 голос
/ 09 августа 2011

Вы можете обернуть выбор в isnull;

SELECT ISNULL((
    SELECT 
        CASE 
            WHEN COUNT(*) > 10 THEN 1
            ELSE 0
        END
    FROM 
    fldt_QueryDSLAM lastDay
    WHERE AccountID = @acc
        AND lastDay.DSL = @dsl
    GROUP BY lastDay.DSL
), -99 /*no match*/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...