Lil*_*sey 2 t-sql sql-server sql-server-2005 view
我可以在同一视图中使用稍后在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
Run Code Online (Sandbox Code Playgroud)
有没有办法编辑视图来执行以下操作
Select
t1.StartMile, t2.EndMile, t2.EndMile - t1.StartMile as TotMile,
TotMile + 30 as EvenMoreMiles
Run Code Online (Sandbox Code Playgroud)
我试过这个并得到错误:
列名称"TotMile"无效
请不要告诉我使用t2.EndMile - t1.StartMile + 30 as EvenMoreMiles.TotMiles在我的实际代码中是一个长例句.
我宁愿不必创建一个中间视图.
我正在使用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,
Run Code Online (Sandbox Code Playgroud)
您也可以使用CROSS APPLY哪些更简洁,特别是如果您正在构建引用前面的别名链.
SELECT t1.StartMile,
t2.EndMile,
TotMile,
EvenMoreMiles,
AndYetMoreMiles
FROM TableStarts AS t1
INNER JOIN TableEnds AS t2
ON t1.Id = t2.Id
CROSS APPLY (SELECT t2.EndMile - t1.StartMile) A(TotMile)
CROSS APPLY (SELECT TotMile + 30) A2(EvenMoreMiles)
CROSS APPLY (SELECT EvenMoreMiles + 100) A3(AndYetMoreMiles)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |