ЕСЛИ равно или оговорка - PullRequest
0 голосов
/ 17 января 2020

У меня есть хранимая процедура, которая выполняет два отдельных запроса и помещает данные в две временные таблицы. Затем у меня есть оператор IF ниже, который, в зависимости от результата, будет отображать одну из двух таблиц.

DECLARE @DATASET1 AS FLOAT
DECLARE @DATASET2 AS FLOAT

SET @DATASET1 = (SELECT SUM(PREM) FROM #Prem1)
SET @DATASET2 = (SELECT SUM(PREM) FROM #Prem2)

IF (@DATASET1 = 0)
BEGIN

    SELECT  DATE,
            SUM(PREM) AS PREM
    FROM #DATASET2
    GROUP BY YEAR, MONTH, DATE
    ORDER BY YEAR, MONTH

END

IF (@DATASET2 = 0)
BEGIN

    SELECT  DATE,
            SUM(PREM) AS PREM
    FROM #DATASET1 
    GROUP BY YEAR, MONTH, DATE
    ORDER BY YEAR, MONTH

END 

Это работало хорошо, пока я не добился некоторого результата в наборе данных1, который не производил 0, а только производил вообще никаких данных.

Так что мне было интересно, можно ли обновить эту часть запроса, чтобы почти сказать:

IF (@DATASET1 = 0 or '')

Я пробовал что-то подобное, но не похоже на работу, отсюда и мой вопрос.

Ответы [ 2 ]

4 голосов
/ 17 января 2020

Ваш скалярный агрегатный запрос (SELECT SUM(PREM) FROM #Prem1) вернет значение NULL, если в таблице или столбце нет записи PREM содержит только NULL значения.

Вы можете обработать NULL с IS NULL, вот так:

IF (@DATASET1 IS NULL OR @DATASET1 = 0)

Вы также можете использовать COALESCE():

IF (COALESCE(@DATASET1, 0) = 0)
1 голос
/ 17 января 2020

Этого можно добиться с помощью ISNULL ()

IF (ISNULL(@DATASET1, 0) = 0)

Синтаксис: ISNULL (выражение, значение)

Parameter           Description
expression          Required. The expression to test whether is NULL
value Required.     The value to return if expression is NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...