急问,一次查询中产生的字段别名,在本查询中再次使用的问题

yang_mn 2006-06-20 08:43:29
有个Access数据库,非常复杂,设计不甚合理,但时间关系无法重新设计,现欲升级到MSSQL
其中有个查询如下
select iif(复杂的条件1) as c1,c1+iif(复杂的条件2) as c2....

这个查询对多个表进行连接,有一两个表字段破百个,记录超10万。本查询中有几十处用到本查询生成的字段别名(如c1,c2....)

把IIF修改为case end,则
select case 复杂的条件1 end as c1,c1+case 复杂的条件2 end as c2...
这在MSSQL中无法通过,所以我替换成

select case 复杂的条件1 end as c1,
case 复杂的条件1 end +case 复杂的条件2 end as c2...

但是运行起来非常之慢,希望有高手能指点一下,有没有什么办法
...全文
195 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vovo2000 2006-06-21
  • 打赏
  • 举报
回复
本查询中有几十处用到本查询生成的字段别名(如c1,c2....)
------------
因为这原因。我觉得把
Select A*B As Col1,A*B*D As Col2 into #临时表 From TableName
Select Col1,Col1*D As Col2 From #临时表
因为多次用到所以放临时表里面重用会比较好
其实这种方法并不比直接慢。
你可以测试一下。
hityou1 2006-06-20
  • 打赏
  • 举报
回复
to paoluo:
使用返回表的函数呢,能快一些么?
paoluo 2006-06-20
  • 打赏
  • 举报
回复
其實你自己的寫法,應該是更好一點的,在這段代碼上應該沒有辦法更優化了。
yang_mn 2006-06-20
  • 打赏
  • 举报
回复
谢谢一天到晚游泳的鱼!
我想第二种会比第一种慢得多吧?
paoluo 2006-06-20
  • 打赏
  • 举报
回复
計算列不能直接拿來用
--一種方法,也就是你的方法
Select A*B As Col1,A*B*D As Col2 From TableName
--再就是這樣用
Select Col1,Col1*D As Col2 From
(Select A*B As Col1,D From TableName) A

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧