【发布时间】:2011-12-21 20:10:58
【问题描述】:
我可以稍后在同一视图中使用在 SQL Server 视图中计算的列吗?
假设我有以下观点:
Select
t1.StartMile, t2.EndMile, t2.EndMile- t1.StartMile as TotMile
from
TableStarts as t1
inner join
TableEnds as t2 on t1.Id = t2.Id
有没有办法编辑视图以执行以下操作
Select
t1.StartMile, t2.EndMile, t2.EndMile - t1.StartMile as TotMile,
TotMile + 30 as EvenMoreMiles
我试过了,但报错:
列名“TotMile”无效
请不要告诉我使用t2.EndMile - t1.StartMile + 30 as EvenMoreMiles。 TotMiles 在我的实际代码中是一个很长的 case 语句。
我宁愿不必创建中间视图。
我使用的是 SQL Server 2005。
稍后添加
感谢您的所有回答。我会全部投票。
答案提出了以下新问题:
鉴于有数千行,TotMiles 如下所示,给出的哪个答案最有效?还是创建中间视图最有效?
CASE WHEN t .TaskType = 1 and t .StartTime < '1/1/2012'
THEN (tv.EndMile - tv.StartMile )
WHEN NOT (t .Location1_PKey = c.pkey OR t .Location2_PKey = c.pkey)
then (tv.EndMile - tv.StartMile )
WHEN (tv.EndMile - tv.StartMile ) < 31 Then 0
ELSE (tv.EndMile - tv.StartMile - 30 )
END AS MilesAdjusted2012,
【问题讨论】:
-
当谈到效率问题时,答案通常是“视情况而定”——我们不知道你的数据是什么样的,你有什么索引等等。我们也不知道是否甚至假设最差的解决方案对于您的目的已经足够有效,或者我们表现最好的答案仍然不足以满足您的情况/
-
谢谢达米安。我很懒。
标签: sql-server sql-server-2005 tsql view