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

Posted

技术标签:

【中文标题】将一列的值用于另一列(SQL Server)?【英文标题】:Use value of a column for another column (SQL Server)? 【发布时间】:2011-07-08 01:10:01 【问题描述】:

可以说我在某张桌子上有很多选择。一列的一个值是用复数 logc 计算的,它被称为 ColumnA。现在,对于另一列,我需要 ColumnA 中的值并向其添加一些其他静态值。

示例 SQL:

select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...

[ColumnA] + 10 是我正在寻找的。复杂的东西是一个巨大的 case/when 块。

想法?

【问题讨论】:

【参考方案1】:

不幸的是,在 SQL Server 2016 中:

SELECT 3 AS a, 6/a AS b;

错误:无效的列名:'a'。

【讨论】:

您可以为此使用 cte: WITH cte AS (SELECT 3 AS a) SELECT a, 6/a AS b FROM cte;【参考方案2】:

你可以:

    在客户端代码中执行+ 10 编写一个标量值函数来封装complex stuff 的逻辑。它将被优化为一次调用。 为另一列复制complex stuff 逻辑。它应该被优化为 1 次调用。 使用子选择应用附加计算

【讨论】:

【参考方案3】:

如果要引用在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

如果您完成了多个级别的部分计算,CTE 往往看起来更清晰,即如果您现在有一个依赖于 ColumnB 的计算来包含在您的查询中。

【讨论】:

【参考方案4】:

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

这是一个例子:

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

【讨论】:

以上是关于将一列的值用于另一列(SQL Server)?的主要内容,如果未能解决你的问题,请参考以下文章

sql 怎样查1列多值全都在一个集合里面

SQL Server:选择一列的计数,同时检查另一列中的不同值

sql 查询某列值为 a和b

SQL Server将一列的多行内容拼接成一行的实现方法

SQL server select语句用于选择另一列的重复条目的ID

sql 里 怎么把一列的值合并成一个字符串