Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL中计数与计数(*)冲突时的计数大小写_Sql_Tsql_Count_Case - Fatal编程技术网

T-SQL中计数与计数(*)冲突时的计数大小写

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不是空值,因此将

尝试统计满足WHERE条件的所有记录,但同时也统计满足其他条件的记录的子集(列大于1的情况)

看起来是这样的:

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分支是多余的。