Tsql oracle rownum传输到t-sql row_number()时出错
简化的原始pl_sql是Tsql oracle rownum传输到t-sql row_number()时出错,tsql,plsql,rownum,Tsql,Plsql,Rownum,简化的原始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; 我尝试将其重写为在SQLServer中作为 select t.*, staff_no + '-' + t.rownum as pk from (select row_number() over
select t.*, staff_no||'-'||rownum as pk
from (select * from hrmmgr.posting where type not in ('X','C') order by staff_no, postingdate) t;
我尝试将其重写为在SQLServer中作为
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') order by staff_no, postingdate) t
但是错误
ORDER BY子句在视图、内联函数和派生函数中无效
表、子查询和常用表表达式(除非为TOP)、偏移量
也为XML指定了or
他回来了
如果我尝试添加偏移量,如错误消息所示,如下所示:
select t.*, staff_no + '-' + t.rownum as pk
from (select row_number() over (order by staff_no, postingdate OFFSET 0 ROWS) as rownum, *
from posting where type not in ('X','C') order by staff_no, postingdate) t
然后显示以下错误
“行”附近的语法不正确
那么,如何重写我的plsql以在sql server中运行呢?子查询中的
ORDER BY
子句似乎是个问题,sql server告诉您,如果不使用类似TOP
的内容,子查询中就不能出现ORDER BY
。但是,这里甚至不需要这样做,因为您对ROW\u 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;
哦,我误解了order by错误消息是指第_number()行中的order by。