别名字段无效的列名

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

我该怎么办?

export $PYTHONPATH=.

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

dongping303 回答:别名字段无效的列名

如果您使用的是 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.lastdate )) > 15 
            then 'a' 
            else 'b' 
         end as Alias2
FROM Table1 T;

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

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

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

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

,

内联别名不允许所有dbms

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

似乎您正在使用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);
本文链接:https://www.f2er.com/3166863.html

大家都在问