在我们创建它的同一查询中引用新创建的计算列

Ann*_*son 2 sql-server-2008

SELECT 
(SUBSTRING(Column1,1,3)) AS ComputedColumn
WHERE ComputedColumn !="dec"
INTO Table2
FROM Table1;
Run Code Online (Sandbox Code Playgroud)

这是一个示例,其中我有一个计算列(它基本上是通过使用表达式创建的)。如果我运行它,我会收到“列名无效”错误,因为我在创建它的同一查询中引用了计算列。

在名为 SAS 的应用程序中,这是通过在 WHERE 子句中为计算列名称添加前缀“(CALCULATED)”来解决的。Sql Server 中是否有类似的解决方案。除了这样做:

SELECT 
(SUBSTRING(Column1,1,3)) AS ComputedColumn
WHERE (SUBSTRING(Column1,1,3)) !="dec"
INTO Table2
FROM Table1;
Run Code Online (Sandbox Code Playgroud)

我知道这是可能的,但是当表达式非常大时会非常混乱。在我们创建它的同一查询中,必须有另一种方法来引用新创建的计算列。

感谢十亿!安娜

JNK*_*JNK 6

您可以CROSS APPLY为此使用:

SELECT ComputedColumn 
INTO Table2 
FROM Table1
CROSS APPLY (SELECT SUBSTRING(Column1,1,3)) CxA(ComputedColumn)
WHERE ComputedColumn !="dec" 
Run Code Online (Sandbox Code Playgroud)