在源代码中引用同名的重命名变量 table

Reference a renamed variable with the same name in the source table

我正在尝试引用新变量 DATE_YEAR,而不是我的 Teradata 数据库 TEST 中的原始 DATE_YEAR。 我怎么才能得到它? 我在 Teradata 文档中找不到任何内容。

SELECT DATE_YEAR+1 AS DATE_YEAR, COUNT(1)
FROM TEST 
WHERE DATE_YEAR = 2016 GROUP BY 1;

将其包装在派生的 table:

select DATE_YEAR_ADJUSTED, count(*)
from
(
    SELECT DATE_YEAR+1 AS DATE_YEAR_ADJUSTED
    FROM TEST 
) as dt
WHERE DATE_YEAR_ADJUSTED = 2016
GROUP BY DATE_YEAR_ADJUSTED

那个 GROUP BY 没有多大意义...反正只有一年。

PS。我不知道 Teradata,但我希望这能奏效。 ANSI SQL.

基于标准 SQL SELECT 列表中的列是在 FROM/WHERE/GROUP BY/HAVING/OLAP 之后创建的,但是 before ORDER BY,所以只能在ORDER BY中使用别名。

由于历史原因,Teradata 允许在任何地方重复使用别名,这非常方便,因为您不必剪切和粘贴或使用嵌套的 SELECT。但是有一些范围规则,只有在找不到列名时才会在别名列表中查找它。所以粗略的经验法则是:永远不要分配与现有列名匹配的别名,然后您可以在任何地方轻松使用它:

SELECT DATE_YEAR+1 AS DATE_YR, COUNT(1)
FROM TEST 
WHERE DATE_YR = 2016 GROUP BY 1;