在条件不匹配的情况下显示 0

问题描述

我需要编写一个查询,其中我需要显示 0,其中源系统今天没有发送任何数据,如果我使用 count(*) 编写简单查询,它不会为我提供任何行。我正在使用 case 语句但没有成功显示实际计数。

select SRC_SYS,case 
when ( select count (*) from table1 where SRC_SYS ='A')='0' then '0' 
else count(1) end as Count

当没有数据时这工作正常,但是当我有数据时它不显示实际计数

解决方法

当我有数据时,它不显示实际计数

呃……不,确实不会;它会显示“1”,因为只有一行;您count(1)处理的数据集只有一行

只需从实际表中进行计数;是否有 0 行或更多行都可以正常工作,因为选择列表仅包含常量或聚合:

select 'A' as SRC_SYS,COUNT(*) 
from table1 
where SRC_SYS ='A'

或者如果您的前端正在使用参数:

select @pwhatever as SRC_SYS,COUNT(*) 
from table1 
where SRC_SYS = @pwhatever

查看 this fiddle 并将 where 1=0 更改为 where 1=1 以查看计数变化