Sql server SQL Server引用计算列

Sql server SQL Server引用计算列,sql-server,tsql,calculated-columns,Sql Server,Tsql,Calculated Columns,我有一个带有计算列的select语句,我想在另一个计算列中使用一个计算列的值。这可能吗?这里有一个人为的例子来说明我正在尝试做什么 SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25 没有 select中单个行的所有结果都是原子的。也就是说,您可以将它们都看作是并行发生的,不能相互依赖 如果您引用的是计算列,则需要更新公式的输入,以便在选择过程中更改结果 将计算列视为宏或小视图,无论何时调用它们,它们都会注入少量计

我有一个带有计算列的select语句,我想在另一个计算列中使用一个计算列的值。这可能吗?这里有一个人为的例子来说明我正在尝试做什么

SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
没有

select中单个行的所有结果都是原子的。也就是说,您可以将它们都看作是并行发生的,不能相互依赖

如果您引用的是计算列,则需要更新公式的输入,以便在选择过程中更改结果

将计算列视为宏或小视图,无论何时调用它们,它们都会注入少量计算

例如,这些列将始终相同:

-- assume that 'Calc' is a computed column equal to Salaray*.25
SELECT Calc, Salary*.25 Calc2 FROM YourTable
还请记住,
持久化
选项不会改变这一切。它保留了适合索引的值,但原子性不变。

如果您正试图这样做,则无法在Select子句中“重置”计算列的值。。。计算列的值基于计算列公式。其中可以包含另一个计算列的值。。。。但是你可以在Select子句中重置公式。。。如果您只想“输出”基于两个计算列的值(如问题中的语法所示),那么 “[calcval2]”

将成为Select子句输出中的列别名


或者您是在问如何定义一个计算列的公式以另一个计算列为基础?

我可以想到两种方法来做到这一点。首先要了解,在语句运行之前,就SQL Server而言,calval1列不存在,因此它不能直接用于显示示例。因此,您可以将calval1列在计算过程中,一次用于calval1,另一次用于calval2计算中的calcval1替代。 另一种方法是生成一个包含calval1的派生表,然后在派生表之外计算calval2,如下所示:

select calcval1*.25 as calval2, calval1, field1, field2
from (select casestament as cavlval1, field1, field2 from my table) a

您需要同时测试这两种方法的性能。

不幸的是,这不是真的,但有时值得一试的解决方法

SELECT [calcval1], [calcval1] * .25 AS [calcval2]
FROM (SELECT [calcval1] = CASE Statement FROM whatever WHERE whatever)

您应该使用外部应用而不是子选择:

select V.calc,V.calc*0.25 from FOO outer apply (select case Statement as calc) V
是的,这是可能的


使用用于嵌套选择:

我在同一条船上..地狱SQL server..MS Access可以做到这一点。我们的业务用户可以计算您在问题中所说的内容,并想知道我为什么不能在SQL中执行。这对我来说很有效,但如果计算中有许多不同的步骤,您可能会得到相当深的嵌套。
select V.calc,V.calc*0.25 from FOO outer apply (select case Statement as calc) V