SQL Case Count作业统计查询返回结果不符合预期原因问询
问题根因说明
1. 核心错误:COUNT函数的逻辑认知偏差
你在统计非预期作业数量时,COUNT()内部的CASE表达式对预期作业返回0、非预期返回1,但COUNT()函数只会忽略NULL值,不管值是0还是1,只要非NULL就会被计入总数,这是导致结果不符合预期的最主要原因。
你可以用以下两种方式修正统计逻辑:
- 把
CASE的预期作业分支返回NULL而非0,再用COUNT()统计 - 直接用
SUM()替换COUNT(),累加非预期作业返回的1值
2. BATCH作业结果符合预期的原因
验证结果显示BATCH库中StatusID=3的作业JobTypeID为30、1、1072、234:
- WHERE条件
JobTypeID NOT IN (1,30,4005)过滤后剩下1072、234两条数据 - 这两条数据在
CASE中分别返回1和0,都被COUNT()统计,所以ITEMS=2>0,StatusID返回AMBER,和你的预期一致。
3. IMPORT作业结果异常的原因
验证结果显示IMPORT库中StatusID=3的作业JobTypeID为4005、124、191,全部属于你设置的预期作业范围:
- 正常情况下WHERE条件
JobTypeID NOT IN (191,124,4005)会过滤掉所有数据,统计结果应为0,StatusID返回GREEN - 你实际得到ITEMS=4、StatusID=AMBER,说明还有4条不在你预设预期列表中的作业在运行,可能是你漏写了预期作业的JobTypeID,或者变量声明的语法错误导致查询范围异常:你写的
DECLARE @Datecreated DATETIME = GetDate())多了一个多余的右括号,会触发语法错误,可能导致查询复用旧的变量值或者统计全量数据。
内容的提问来源于stack exchange,提问作者Badja
相关产品推荐
相关产品推荐

