在 SQL 计算中使用别名

为什么这个查询不起作用?

SELECT 10 AS my_num, my_num*5 AS another_number
FROM table

在这个示例中,我试图在其他计算中使用 my _ num 别名,结果是未知列“ my _ num”

这是我正在尝试做的事情的一个简化版本,但基本上我想使用一个别名来进行其他计算。我的计算要复杂得多,这就是为什么我用不同的方式重复了好几次,所以最好使用别名。

58656 次浏览

您将需要使用一个子选择来以这种方式使用这个别名

SELECT my_num*5 AS another_number FROM
(
SELECT 10 AS my_num FROM table
) x

Sql 中的别名与编程语言中的变量不同。别名只能在特定的位置再次引用(特别是在 GROUP BYHAVING子句中)。但是不能在 SELECT子句中重用别名。因此,您可以使用一个派生查询(如 Rubens Farias所建议的) ,它基本上允许您重命名列和/或命名任何计算列。

或者,如果公式通常是固定的,则可以使用 VIEW

CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;

我相信这会比使用派生查询稍微快一点,但它可能在很大程度上取决于您的真实查询。

或者你可以直接复制这些工作:

SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;

这在 php/perl 之类的程序中可能很方便:

my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";

只需用 (SELECT alias)包装您重用的别名:

SELECT 10 AS my_num,
(SELECT my_num) * 5 AS another_number
FROM table

另一种选择是使用 APPY 操作符

SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY
(SELECT 5 AS my_num) X