我有一个带有计算列的 select 语句,我想在另一个计算列中使用一个计算列的值。这可能吗?这是一个人为的例子来展示我想要做什么。
SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
我有一个带有计算列的 select 语句,我想在另一个计算列中使用一个计算列的值。这可能吗?这是一个人为的例子来展示我想要做什么。
SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
不。
选择中单行的所有结果都是原子的。也就是说,您可以将它们全部视为并行发生并且不能相互依赖。
如果您指的是计算列,那么您需要更新公式的输入,以便在选择期间更改结果。
将计算列视为宏或迷你视图,在调用它们时会注入一些计算。
例如,这些列总是相同的:
-- 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 语句进行嵌套选择:
我能想到两种方法来做到这一点。首先要了解,就 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 子句中“重置”计算列的值,如果这是您要尝试做的事情...计算列的值基于计算列公式。哪个可以包含另一个计算列的值....但是您不能重置 Select 子句中的公式...如果您要做的只是“输出”基于两个计算列的值,(如您的语法中的问题读取”然后“[calcval2]”
在
SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
只会成为 Select 子句输出中的列别名。
还是您在问如何定义一个计算列的公式以基于另一个计算列?