微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在SELECT语句中引用表达式的别名

如何解决在SELECT语句中引用表达式的别名

我有以下选择语句,该语句创建表达式“ newdate”,然后引用另一个名为“ newname”的表达式:

SELECT
Iif([DateColumn1]='',Format(CONVERT(DATE,Dateadd(day,RIGHT([DateColumn2],3)-1,CONVERT(DATETIME,LEFT([DateColumn2],4)))),'MMddyy'),RIGHT(datecolumn3],LEFT([DateColumn3],'MMddyy')) AS **newdate**,Upper(LEFT(Rtrim([NameColumn4]),19)+''+[newdate]+''+RIGHT([NameColumn5],3)) AS newname

FROM   table1

由于某种原因,运行此命令时会收到无效列错误,它引用了我创建的“ newdate”表达式。 “ newdate”表达式可以正常工作,但是当我为“ newname”添加第二个表达式时,它停止工作。 有没有办法将一个表达式引用为另一个也具有别名的表达式中的别名?

解决方法

您不能在与创建别名相同的范围内引用别名-如果希望避免重复逻辑,则可以在子查询中创建别名。

SELECT
    UPPER(LEFT(RTRIM([NameColumn4]),19)+''+[newdate]+''+RIGHT([NameColumn5],3)) AS [NewName]
FROM (
  SELECT NameColumn4,NameColumn5,IIF([DateColumn1]='',FORMAT(CONVERT(DATE,DATEADD(DAY,RIGHT([DateColumn2],3)-1,CONVERT(DATETIME,LEFT([DateColumn2],4)))),'MMddyy'),RIGHT(datecolumn3],LEFT([DateColumn3],'MMddyy')) AS NewDate
  FROM table1
) X
,

不能。但是SQL Server具有一个非常漂亮的功能,您可以使用apply from 子句中定义列:

SELECT v.newdate,Upper(LEFT(Rtrim(t1.[NameColumn4]),19) + v.newdate + RIGHT(t1.[NameColumn5],3)) AS newname
FROM table1 t1 CROSS APPLY
     (VALUES ( <complicated expression here) 
     ) v(newdate)
,

在SQL Server中,有一个称为ALL AT ONCE的概念,其中所有操作都在逻辑查询执行阶段(此处为SELECT)。因此,您在此处面临问题。

Detailed Information on All at Once

SELECT FirstName + LastName AS FullName,Salutation + FullName  -- Will throw error here
FROM TableName

您可以通过多种方式处理该问题:

  • 子查询 Dale K在另一个答案中提出了建议
  • 公用表表达式下面给出的
;WITH CTE_NewDate AS
(
SELECT
Iif([DateColumn1]='',Format(CONVERT(DATE,Dateadd(day,'MMddyy')) AS newdate,NameColumn4,NameColumn5

FROM   table1
)
SELECT newDate,Upper(LEFT(Rtrim([NameColumn4]),3)) AS newname
FROM CTE_NewDate 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?