我有一个计算列的select语句,我想在另一个计算列中使用一个值。这可能吗?这是一个人为的例子,以显示我正在尝试做什么。SQL Server参考计算列
SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
我有一个计算列的select语句,我想在另一个计算列中使用一个值。这可能吗?这是一个人为的例子,以显示我正在尝试做什么。SQL Server参考计算列
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子句中计算列的值......计算列的值基于计算的列公式。其中可以包含另一个计算列的值....但您不能在Select子句中重置公式...如果您只想根据两个计算列“输出”该值(如您的语法读取问题”然后 ‘[calcval2]’
在
SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
只想成为一个列别名在SELECT子句的输出。
还是想提出如何定义公式一计算栏要根据另一个?
我能想到的两种方法去做。首先要明白,直到语句运行之前,就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 [calcval1], [calcval1] * .25 AS [calcval2]
FROM (SELECT [calcval1] = CASE Statement FROM whatever WHERE whatever)
这适用于我,尽管如果计算中有很多不同的步骤,最终可能会产生很深的嵌套。 – 2015-11-12 23:19:01
您应该使用外部应用,而不是一个子查询:
select V.calc,V.calc*0.25 from FOO outer apply (select case Statement as calc) V
是的,它是可能的。
使用WITH Statement嵌套的选择:
我在同一条船上..地狱SQL服务器。MS Access可以做到这一点。我们的业务用户可以计算出您在问题中所说的内容,并想知道为什么我无法使用SQL。 – 2010-02-23 18:25:50