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)
我知道这是可能的,但是当表达式非常大时会非常混乱。在我们创建它的同一查询中,必须有另一种方法来引用新创建的计算列。
感谢十亿!安娜
您可以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)