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

mnemlml8  于 2022-11-21  发布在  SQL Server
关注(0)|答案(4)|浏览(196)

假设我在某个表上有一个巨大的选择。一个列的值是用复杂的logc计算出来的,它被称为 ColumnA。现在,对于另一个列,我需要来自 ColumnA 的值,并向它添加一些其他的静态值。
示例SQL:

select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
  • [ColumnA] + 10* 是我要找的。复杂的东西是一个巨大的case/when块。

想法?

vbkedwbf

vbkedwbf1#

如果 要 引用 在 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 看 起来 会 更 清晰 。

xmq68pz9

xmq68pz92#

在 SQL Server 2016 中 , 您 可以 :

SELECT 3 AS a, 6/a AS b;

中 的 每 一 个
错误 : 无效 的 列名 :' a ' 段 。

7xllpg7q

7xllpg7q3#

您可以使用子查询和列别名解决此问题。
下面是一个例子:

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

6fe3ivhb4#

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

相关问题