如何在SQL Server同一条SELECT语句中引用自定义列
在SQL Server中引用同一条SELECT里定义的列
在SQL Server里,同一条SELECT语句中刚定义的列无法直接被其他列引用——因为所有列的表达式是并行计算的,还未生成的列没法被后续逻辑调用。你可以用以下几种方式实现需求:
方法1:重复计算表达式
最简单直接的方式就是在B的CASE语句里重复A的计算逻辑,虽有冗余但适合简单场景:
Select A = [variable 1 in C] + [variable 2 in C], B = CASE WHEN ([variable 1 in C] + [variable 2 in C]) > 1 THEN 1 END From C
方法2:使用CTE(公共表表达式)
先通过CTE提前计算出列A,再在主查询里引用这个结果,结构更清晰,适合复杂逻辑:
WITH CteCalculated AS ( SELECT A = [variable 1 in C] + [variable 2 in C], -- 如果需要原表C的其他字段,在这里一并选取 * FROM C ) SELECT A, B = CASE WHEN A > 1 THEN 1 END FROM CteCalculated
方法3:使用CROSS APPLY
通过CROSS APPLY把列A的计算封装成子查询,主查询直接引用子查询结果,灵活性高,尤其适合多列计算场景:
SELECT Calc.A, B = CASE WHEN Calc.A > 1 THEN 1 END FROM C CROSS APPLY ( SELECT A = [variable 1 in C] + [variable 2 in C] ) AS Calc
内容的提问来源于stack exchange,提问作者LaTeXFan
相关产品推荐
相关产品推荐

