用 where 子句计数

Dar*_*lic 4 sql-server count sql-server-2014 where

有没有办法在 COUNT 中有 WHERE 子句?或者如何用一些条款来计算?

select 
  a
  b,
  count(c where t1.u='UAE') as c1 
from t1 
Run Code Online (Sandbox Code Playgroud)

我正在使用 MS SQL Server 2014

ype*_*eᵀᴹ 11

不,您拥有的语法无效,可以通过使用CASE表达式进行更正。
(我猜你有一个GROUP BY a, b,否则你会得到一个错误)。

select 
  a
  b,
  count(case when t1.u = 'UAE' then c else null end) as c1 
from t1 
group by a, b ;
Run Code Online (Sandbox Code Playgroud)

请注意,这ELSE NULL是多余的并且可以删除,因为ELSE无论如何这是默认行为:

select 
  a
  b,
  count(case when t1.u = 'UAE' then c end) as c1 
from t1 
group by a, b ;
Run Code Online (Sandbox Code Playgroud)

有一种(SQL 标准)FILTER语法接近您的尝试,但 SQL Server 尚未实现它:

select 
  a
  b,
  count(c) filter (where t1.u = 'UAE') as c1 
from t1 
group by a, b ;
Run Code Online (Sandbox Code Playgroud)