【问题标题】:IF equals or clauseIF 等于或子句
【发布时间】:2020-01-17 09:19:44
【问题描述】:

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

我尝试过类似的方法,但似乎不起作用,因此我提出了问题。

【问题讨论】:

    标签: sql sql-server tsql stored-procedures sql-null


    【解决方案1】:

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

    您可以使用IS NULL 处理NULL,如下所示:

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

    你也可以使用COALESCE():

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

    【讨论】:

      【解决方案2】:

      你可以通过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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 2021-06-20
        • 1970-01-01
        • 1970-01-01
        • 2023-01-15
        相关资源
        最近更新 更多