【OCGP】COUNT[通常情况下利用count进行计算行数的时候,对指定字段的不会将null值计算在内]select count(null)
--结果
/*消息 8117,级别 16,状态 1,第 1 行
操作数数据类型 void type 对于 count 运算符无效。*/[原因分析]:
[首先做个有趣的实验:]
declare @i int
Set @i = null
print isnull(@i,0)
select count(@i)
--=================结果
/*0*/[通过实验我们可以看出,实际上对应select count(null)的报错,是说名count内的表达是不符合运算符要求。是一个非法的类型。
当即与一个合法类型后,count(@i) 就可以进行计数。][同理:]
Select count(case when 0=1 then 1 else null end);
--结果
/*0*/--=================实际示例:
select workorder_id
from projects
group by workorder_id
having count(*)
= COUNT(case when step_nbr=0 and step_status='c' then 1 else NULL end)
+ COUNT( case when step_nbr <>0 and step_status='w' then 1 else NULL end);[可以理解为null值会被count所忽略进行处理] 个人理解,如有偏颇之处,还请指正!
解决方案 »
- sqlserver函数,支持可变参数吗?
- 请问怎么恢复SQL数据库!有两个文件:一个MDF和一个LDF文件
- 修改有关系的多个表,将有关系的字段同时由5个char长扩充成 8个长!
- 表a某个字段的值的一部分在表b存在,怎么select
- 自定义数据类型
- 请教sql server 2008安装问题!!!
- sqlserver profiler里的applicationName列下的值各代表着什么
- ★★★SQL Server2005 建表的时候出现 "未将对象引用设置到对象的实例"
- 请教MSSQL数据库的网络配置!!
- SqlServer2012 创建表时CONSTRAINT PK_t_StockBillEntry PRIMARY KEY CLUSTERED具体什么意思?
- SQL2005中的事务与锁定(九)--2
- 将一个时间段之内的月份输出为一列
-----------
0
警告: 聚合或其他 SET 操作消除了空值。(1 行受影响)
/*-----------
0
警告: 聚合或其他 SET 操作消除了空值。(1 行受影响)
*/
[SQL Server 2005 4035]
/*
执行结果:
-----------
0
警告: 聚合或其他 SET 操作消除了空值。(1 行受影响)
*/
你看执行计划,
case when 0=1 then 1 else null end是先将这个作为了一个列,然后再COUNT(列)所以没问题
--Microsoft SQL Server 2005 - 9.00.3042.00