别名字段无效的列名

时间:2019-11-04 12:08:56

标签: sql sql-server

得到这个错误 无效的列名“ ALIAS1”

我该怎么办?

export $PYTHONPATH=.

在评论中发布了查询... 谢谢!

3 个答案:

答案 0 :(得分:1)

如果您使用的是 SQLServer ,那么问题不仅出在您的别名上,它还在减去日期类型的两列。还不能使用在同一选择中创建的别名。另外,如果您使用的是T.firstdate表达式,则应在表名后添加大写字母T。

在我的DEMO

  1. 您可以看到两个日期相减会产生错误 (我的DEMO中的查询1和query2和查询3)
  2. 您还可以看到如果不使用表别名T(我的DEMO中的查询4)会发生什么情况
  3. 您可以看到如果您在创建别名的选择中使用别名(从我的DEMO查询5)会发生什么情况

如果您使用的是SQL Server,我相信这就是您所需要的:

SELECT T.firstdate
       , T.lastdate 
       , datediff(day, T.firstdate , T.lastdate) as Alias1
       , case when (datediff(day, T.firstdate , T.lastdate )) > 15 
            then 'a' 
            else 'b' 
         end as Alias2
FROM Table1 T;

以下是该正确示例的演示:DEMO

如果您使用的是 ORACLE ,那么第一个查询就可以像此DEMO

SELECT T.firstdate
       , T.lastdate 
       , (T.lastdate - T.firstdate) as ALIAS1
       , case when (T.lastdate - T.firstdate) > 15 then 'a' else 'b' end as ALIAS2 
FROM Table1 T;

因此,您看到,我们需要知道您使用的数据库。 :)

答案 1 :(得分:0)

内联别名不允许所有dbms

 SELECT T.firsrdate, T.lastdate ,
T.lastdate - T.firsrdate as ALIAS1,
case when T.lastdate - T.firsrdate> 15 then 'a' else 'b' end as 
 ALIAS2 FROM Table1

答案 2 :(得分:0)

似乎您正在使用SQL server,那么您可以使用apply来避免重复相同的表达式:

select t.firstdate, t.lastdate, tt.alias1,
       (case when alias1 > 15 then 'a' else 'b' end) as alias2
from table1 t cross apply
     ( values (t.lastdate - t.firstdate) 
     ) tt(alias1);