SQLSERVER 迁移ORACLE语句语法问题

disly0613 2017-10-14 11:18:05
最近有一个项目在做迁移,是从sqlserver到oracle。如下语句遇到麻烦了。

不知道该怎么写了



select
(select top(1) c.skss_swjg_dm
from c
where c.nsrsbh = b.nsrsbh
order by c.swdjblx_dm)
from a, b
where a.nsrdzdah = b.nsrdzdah
group by b.nsrsbh




这个子查询
(select top(1) c.skss_swjg_dm
from c
where c.nsrsbh = b.nsrsbh
order by c.swdjblx_dm)

执行顺序是
先c表关联b表,然后按swdjblx_dm排序,处理好的结果再取第一行。


1.首先oracle里面select后面的子查询不能order by操作
order by c.swdjblx_dm会报错

2.ORACLE里面没有TOP的概念,只有rownum,TOP和ROWNUM不同,TOP是查询出来结果后再判断,ROWNUM要想达到和TOP一样的效果只能在外面套一层,这样会有一个问题就是套一层以后 where c.nsrsbh = b.nsrsbh这里的B表识别不了了。
select k. skss_swjg_dm from
(select c.skss_swjg_dm
from c
where c.nsrsbh = b.nsrsbh
order by c.swdjblx_dm) k
where rownum = 1
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ah770344766 2017-10-15
  • 打赏
  • 举报
回复
子查询中如果只是取某个字段最小值,那么可以使用oracle的一个聚合函数min(字段名)
碧水幽幽泉 2017-10-14
  • 打赏
  • 举报
回复
注意提问的方法,最大的问题就是需要什么结果只字未提!
碧水幽幽泉 2017-10-14
  • 打赏
  • 举报
回复
题目相当容易,但是要查询的结果字段,一个都没有说,这个本身就是最大的问题。 我这里只用"相关字段"代替,你需要哪个字段就填写哪个字段。

select a表相关字段字段。。。,b表相关字段字段
  from a,
       (select c表相关字段,b表相关字段
	      from(select c.skss_swjg_dm,row_number()over(order by c.swdjblx_dm) rn
		         from c, b
		        where c.nsrsbh = b.nsrsbh
		      )
        where rn = 1
		)b
 where a.nsrdzdah = b.nsrdzdah

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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