在源表中引用具有相同名称的重命名变量

时间:2016-05-03 08:04:55

标签: sql teradata

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

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

2 个答案:

答案 0 :(得分:2)

基于标准SQL,SELECT-list中的列在 FROM / WHERE / GROUP BY / HAVING / OLAP后创建,但之前 ORDER BY,所以你可以仅在ORDER BY中使用别名。

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

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

答案 1 :(得分:0)

将其包装在派生表中:

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。