微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

oracle rownum转移到t-sql row_number并出现错误

如何解决oracle rownum转移到t-sql row_number并出现错误

简化来源pl_sql

select t.*,staff_no||'-'||rownum as pk 
from (select * from hrmmgr.posting where type not in ('X','C') order by staff_no,postingdate) t;

我尝试将其重写为在sql server中运行

select t.*,staff_no + '-' + t.rownum as pk
from (select row_number() over (order by staff_no,postingdate) as rownum,* 
from posting where type not in ('X',postingdate) t

但是出错

ORDER BY子句在派生的视图,内联函数中无效 表,子查询和公用表表达式,除非TOP,OFFSET 或还指定了FOR XML。

返回。

如果我尝试按如下错误消息中所示添加OFFSET:

select t.*,postingdate OFFSET 0 ROWS) as rownum,postingdate) t 

然后显示以下错误

“ ROWS”附近的语法不正确。

那么如何重写我的plsql以在sql服务器中运行?

解决方法

子查询中的ORDER BY子句似乎是问题所在,SQL Server告诉您ORDER BY在不使用TOP之类的子查询中就无法出现。但是,这里甚至没有必要,因为您对ROW_NUMBER的调用已经指定了在分配行号时要使用的ORDER BY子句。试试这个版本:

SELECT t.*,staff_no + '-' + t.rownum AS pk
FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY staff_no,postingdate) AS rownum,* 
    FROM posting
    WHERE type NOT IN ('X','C')
) t;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。