如何在SQL Server中无嵌套子查询实现PostgreSQL的FILTER计数语法
将PostgreSQL的FILTER聚合语法转换为SQL Server兼容写法(无需子查询)
SQL Server不支持PostgreSQL中的FILTER(WHERE ...)聚合语法,这就是你遇到语法错误的原因。要实现相同逻辑且不使用子查询,可以用CASE表达式结合聚合函数来替代。
原PostgreSQL代码
SELECT COUNT(*) AS "QUANTIDADE TOTAL", COUNT(*) FILTER(WHERE SEXO = 'Masculino') AS "MASCULINO" FROM FUNCIONARIOS;
转换后的SQL Server代码
SELECT COUNT(*) AS [QUANTIDADE TOTAL], COUNT(CASE WHEN SEXO = 'Masculino' THEN 1 END) AS [MASCULINO] FROM FUNCIONARIOS;
说明
CASE WHEN SEXO = 'Masculino' THEN 1 END会在满足条件时返回1,不满足时返回NULLCOUNT()函数会自动忽略NULL值,因此最终统计结果和PostgreSQL的FILTER逻辑完全一致- SQL Server中推荐用方括号
[]包裹带空格的列别名,若要使用双引号,需先设置SET QUOTED_IDENTIFIER ON;
内容的提问来源于stack exchange,提问作者Ricardo Luiz Vieira
相关产品推荐
相关产品推荐

