假设我在某个表上有一个巨大的选择。一个列的值是用复杂的logc计算出来的,它被称为 ColumnA。现在,对于另一个列,我需要来自 ColumnA 的值,并向它添加一些其他的静态值。
示例SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
- [ColumnA] + 10* 是我要找的。复杂的东西是一个巨大的case/when块。
想法?
假设我在某个表上有一个巨大的选择。一个列的值是用复杂的logc计算出来的,它被称为 ColumnA。现在,对于另一个列,我需要来自 ColumnA 的值,并向它添加一些其他的静态值。
示例SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
想法?
4条答案
按热度按时间vbkedwbf1#
如果 要 引用 在
SELECT
子句 中 计算 的 值 , 则 需要 将 现有 查询 移动 到 子 SELECT 中 :中 的 每 一 个
您 必须 为 该 表 引入 一 个 别名 ( 在 上 图 中 ,
t
位于 右 括号 之后 ) , 即使 您 不 打算 使用 它 。( 同样 , 假设 您 使用 的 是 SQL Server 2005 或 更 高 版本 , 则 可以 将 现有 查询 移动 到 CTE 中 ) :
格式
如果 您 已经 完成 了 多 个 级别 的 部分 计算 , 也 就是 说 , 如果 您 现在 有 一 个 依赖 于 ColumnB 的 计算 要 包含 在 您 的 查询 中 , 那么 CTE 看 起来 会 更 清晰 。
xmq68pz92#
在 SQL Server 2016 中 , 您 可以 :
中 的 每 一 个
错误 : 无效 的 列名 :' a ' 段 。
7xllpg7q3#
您可以使用子查询和列别名解决此问题。
下面是一个例子:
6fe3ivhb4#
您可以:
1.在客户端代码中执行
+ 10
1.编写一个标量值函数来封装
complex stuff
的逻辑。它将被优化为单个调用。1.复制另一列的
complex stuff
逻辑。它应该被优化到1个调用中。1.使用子选择应用附加计算