1

我的公司正在从 Netezza 过渡到 AWS/Redshift。使用 Netezza 时,可以方便地在 select 语句中命名列,然后可以再次引用它,例如:

Select Column1 + Column2 as Alias1, Alias1 + Column3 as Alias2 from X where Alias1 > 0

Netezza 允许我这样做,但我不能在 Redshift 中这样做。(我也不能在 MS SQL 中这样做)。我不能在 SELECT 语句中引用列别名,也不能在 WHERE 子句中引用它。

这个功能的名称是什么,有没有办法实现它?如果没有这个功能,我就不得不繁琐地编写子查询。

谢谢

4

2 回答 2

0

你不能这样做,但你可以编写类似于子查询但按逻辑顺序排列的 CTE:

WITH
q1 as (
    select Column1 + Column2 as Alias1, Column3
    from x
)
select *, Alias1 + Column3 as Alias2
from q1
where Alias1>0
于 2018-05-18T22:15:48.160 回答
0

你不能这样做,但为什么不这样做有一个非常具体和合乎逻辑的原因。

SQL 查询的逻辑处理涉及的阶段按特定顺序如下:

FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
DISTINCT clause
ORDER BY clause
LIMIT / OFFSET clause

因此,当您的查询到达时select,其他一切都已经完成。该where部分位于该部分之前select,因此无法看到您设置的列别名。

您可以从此链接阅读更多内容。

于 2018-05-19T17:28:51.880 回答