SQL 服务器:使用 "as" 选择的列名称具有和 where 子句

SQL Server : having and where clauses for column names selected with "as"

我试图在 Microsoft SQL 服务器上获取类似查询的结果:

SELECT 
    A, B, C AS DANUMBER 
FROM 
    TABLE
WHERE 
    B = 'SOMEVALUE'
HAVING 
    DANUMBER > 0

但是,我无法在 SQL 服务器中使用通过 "AS" 选择的列。服务器根本不知道 DANUMBER

我查找的每个示例都会显示聚合函数,但没有解决我的问题。此查询适用于 mySQL,但不适用于 SQL 服务器。

我想我可能遗漏了一些语法或其他东西...

MySQL 扩展了 HAVING 子句的使用,以识别 SELECT 中定义的列别名。您不能在其他数据库中假设这种行为(它在 SQL Server 和 Oracle 中不起作用,例如,它在 Postgres 中起作用)。您有三种选择:重复表达式、使用子查询或使用 CTE。

第一个是最好的代码,在 SQL 服务器和 MySQL 中都可能是 运行:

SELECT A, B, C AS DANUMBER 
FROM TABLE
WHERE B = 'SOMEVALUE'
GROUP BY A, B, C
HAVING C > 0;

或:

SELECT A, B, C AS DANUMBER 
FROM TABLE
WHERE B = 'SOMEVALUE' AND 
      C > 0;