0

我有一个存储过程,它运行两个单独的查询并将数据放入两个临时表中。然后我在下面有一个 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 

这一直很好,直到我在 dataset1 上找到了一些没有产生 0 但根本没有产生数据的输出。

所以我想知道是否可以将查询的这一部分更新为几乎说:

IF (@DATASET1 = 0 or '')

我已经尝试过类似的方法,但似乎没有用,因此我提出了问题。

4

2 回答 2

4

如果表中没有记录或列中仅包含值,则您的标量聚合查询 ( SELECT SUM(PREM) FROM #Prem1) 将返回一个值。NULLPREMNULL

您可以处理NULLIS NULL如下所示:

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

您还可以使用COALESCE()

IF (COALESCE(@DATASET1, 0) = 0)
于 2020-01-17T09:21:17.880 回答
1

您可以通过使用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
于 2020-01-17T09:27:44.890 回答