是否将一列的值用于另一列(SQL Server)?

是否将一列的值用于另一列(SQL Server)?,sql,sql-server,calculated-columns,Sql,Sql Server,Calculated Columns,假设我在某张桌子上有一个巨大的选择。一个列的一个值是使用复数logc及其名为ColumnA的函数计算的。现在,对于另一列,我需要ColumnA中的值,并向其中添加一些其他静态值 示例SQL: select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ... [ColumnA]+10是我要找的。复杂的东西是一个巨大的案例 想法?您可以使用子查询和列别名来解决这个问题 下面是一个例子:

假设我在某张桌子上有一个巨大的选择。一个列的一个值是使用复数logc及其名为ColumnA的函数计算的。现在,对于另一列,我需要ColumnA中的值,并向其中添加一些其他静态值

示例SQL:

select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
[ColumnA]+10是我要找的。复杂的东西是一个巨大的案例

想法?

您可以使用子查询和列别名来解决这个问题

下面是一个例子:

SELECT MaxId + 10
FROM (SELECT Max(t.Id) As MaxId
      FROM SomeTable t) As SomeTableMaxId

如果要引用在SELECT子句中计算的值,则需要将现有查询移动到子SELECT中:

SELECT
    /* Other columns */,
    ColumnA,
    ColumnA + 10 as ColumnB
FROM
(select table.id, table.number, complex stuff [ColumnA].. from table ...
) t
即使您不打算使用它,也必须在右括号后为上面的t中的表引入别名

同样,假设您使用的是SQL Server 2005或更高版本,您可以将现有查询移动到CTE中:

;WITH PartialResults as (
     select table.id, table.number, complex stuff [ColumnA].. from table ...
)
SELECT /* other columns */, ColumnA, ColumnA+10 as ColumnB from PartialResults
如果您已经完成了多个级别的部分计算,也就是说,如果您现在的计算依赖于要包含在查询中的ColumnB,则CTE看起来更干净。

您可以:

执行客户端代码中的+10 编写一个标量值函数来封装复杂内容的逻辑。它将优化为单个调用。 复制另一列的复杂填充逻辑。它应该优化为1个调用。 使用子选择应用附加计算
不幸的是,在SQL Server 2016中:

SELECT 3 AS a, 6/a AS b;

错误:列名“a”无效。

您可以为此使用cte:将cte作为SELECT 3作为SELECT a,将cte中的6/a作为b;