在SQL Server代码中减去返回NULL



我在这个SQL服务器代码中有问题,即使使用ISNULL或COALESCE函数它一直返回NULL,有人能告诉我如何解决它吗?

CASE WHEN TIPO_X = 'F'
AND TIPO_CALCULOX IN ('N','S','D')
AND TRPR_COD_X IN (7,13,15,17) THEN CASE WHEN EVEN_COD_X IN (623,70623,947,70947,1871,71871,2697,72697,2871,72871,30623,30947,31871,22697,22871,20623,20947,21871) THEN CONVERT(int, (SELECT SUM(VLR_X)
                                                                                                                      FROM GMS_RELATORIO_GERAL
                                                                                                                      WHERE CHAPA_X = MATRÍCULA_DO_SEGURADO
                                                                                                                        AND EVEN_COD_X IN (623 + 7062 + 947 + 70947 + 1871 + 71871 + 2697 + 72697 + 2871 + 72871 + 30623 + 30947 + 31871)
                                                                                                                        AND MONTH(DT_COMP_X) = @MES)) - CONVERT(int,(SELECT SUM(VLR_X)
                                                                                                                                                                     FROM GMS_RELATORIO_GERAL
                                                                                                                                                                     WHERE CHAPA_X = MATRÍCULA_DO_SEGURADO
                                                                                                                                                                       AND EVEN_COD_X IN (22697 + 22871 + 20623 + 20947 + 21871)
                                                                                                                                                                       AND MONTH(DT_COMP_X) = @MES))
END
ELSE ''
END AS RENUMERAÇÃO_DA_CONTRIBUIÇÃO

我怀疑这部分代码是否符合预期:

AND EVEN_COD_X IN (623 + 7062 + 947 + 70947 + 1871 + 71871 + 2697 + 72697 + 2871 + 72871 + 30623 + 30947 + 31871)

等价于:

AND EVEN_COD_X IN (397898)

你可能需要逗号代替。

在您的三个EVEN_COD_X IN子句中,最后两个是错误的:值应该用逗号(,)分隔。

CASE WHEN EVEN_COD_X IN (623 + 7062) -- It should be (623, 7062)

一个好的做法是:

  1. 简化代码(使用CTE或临时表而不是在一个查询中执行所有操作);
  2. 使用缩进(这样的错误会变得更明显);
  3. 用于调试,进一步简化它,直到它可以工作。

最新更新