T-SQL中计数与计数(*)冲突时的计数大小写
尝试统计满足WHERE条件的所有记录,但同时也统计满足其他条件的记录的子集(列大于1的情况) 看起来是这样的:T-SQL中计数与计数(*)冲突时的计数大小写,sql,tsql,count,case,Sql,Tsql,Count,Case,尝试统计满足WHERE条件的所有记录,但同时也统计满足其他条件的记录的子集(列大于1的情况) 看起来是这样的: SELECT COUNT(*) AS BOOKINGS#, Count(Case WHEN mNumber > 1 THEN 1 ELSE 0 END) AS MEMBERBOOKINGS 我的问题是,两列返回相同的结果(即较小的结果(案例)) 我相信这很简单,但我在这里很挣扎。当您将COUNT与表达式一起使用时,它将返回非空值的数量,并且由于0不是空值,因此将
SELECT
COUNT(*) AS BOOKINGS#,
Count(Case WHEN mNumber > 1 THEN 1 ELSE 0 END) AS MEMBERBOOKINGS
我的问题是,两列返回相同的结果(即较小的结果(案例))
我相信这很简单,但我在这里很挣扎。当您将
COUNT
与表达式一起使用时,它将返回非空值的数量,并且由于0不是空值,因此将对其进行计数
在文件中,这说明如下:
COUNT(所有表达式)为组中的每一行计算表达式,并
返回非空值的数目
(全部为默认选项)
解决方案是将大小写表达式更改为:
COUNT(CASE WHEN mNumber > 1 THEN 1 ELSE NULL END)
-- the else branch is redundant and could be removed, but I wanted to be explicit here.
或者改用sum
:
SUM(CASE WHEN mNumber > 1 THEN 1 ELSE 0 END)
当您将
COUNT
与表达式一起使用时,它将返回不为null的值的数量,并且由于0不为null,因此将对其进行计数
在文件中,这说明如下:
COUNT(所有表达式)为组中的每一行计算表达式,并
返回非空值的数目
(全部为默认选项)
解决方案是将大小写表达式更改为:
COUNT(CASE WHEN mNumber > 1 THEN 1 ELSE NULL END)
-- the else branch is redundant and could be removed, but I wanted to be explicit here.
或者改用sum
:
SUM(CASE WHEN mNumber > 1 THEN 1 ELSE 0 END)
或者只是
Count(当mNumber>1时,则1结束)
,因为null不是countedGreat,谢谢。我知道这是件愚蠢的事。但现在我遇到了一个问题,即存在一些错误数据,并且mNumber并不总是INT,因此获取转换失败错误。有没有一种方法可以忽略任何不是INT的东西,或者从一开始就将其转换为INT?本质上,我只想计算长度为7个数字的mNumber。明白了-当(LEN(mNumber)=7)谢谢@波西米亚式的。else分支是冗余的。或者只是Count(当mNumber>1时,则为1结束)
,因为null不是countedGreat,谢谢。我知道这是件愚蠢的事。但现在我遇到了一个问题,即存在一些错误数据,并且mNumber并不总是INT,因此获取转换失败错误。有没有一种方法可以忽略任何不是INT的东西,或者从一开始就将其转换为INT?本质上,我只想计算长度为7个数字的mNumber。明白了-当(LEN(mNumber)=7)谢谢@波西米亚式的。else分支是多余的。