我在这个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)
一个好的做法是:
- 简化代码(使用CTE或临时表而不是在一个查询中执行所有操作);
- 使用缩进(这样的错误会变得更明显);
- 用于调试,进一步简化它,直到它可以工作。