我有一个带有计算列的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

另请注意, persisted 选项不会更改任何此选项。它保持了值很好的索引值,但原子性不会改变。

其他提示

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

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

是的,这是可能的。

使用 WITH Statement 进行嵌套选择:

我可以想到两种方法来做到这一点。首先要了解到,在语句运行之前,对于SQL Server而言,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 V.calc,V.calc*0.25 from FOO outer apply (select case Statement as calc) V

你无法“重置” Select子句中计算列的值,如果这是您要执行的操作...计算列的值基于计算的列公式。哪个CAN可以包含另一个计算列的值....但是你不能在Select子句中重置公式...如果你想要做的只是“输出”。基于两个计算列的值,(因为您的问题中的语法读取“然后是     " [calcval2] QUOT;结果 在

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top