Oracle到SQL Server查询迁移结果为:ORDER BY子句在视图、内联函数和派生表中无效
以下Oracle查询需要迁移到T-SQL,但出现以下错误: ORDER BY子句在视图、内联函数和派生函数中无效 表、子查询和常用表表达式(除非为TOP)、偏移量 也为XML指定了or Oracle可以毫无错误地处理下面的代码 通过删除订单根本没有帮助Oracle到SQL Server查询迁移结果为:ORDER BY子句在视图、内联函数和派生表中无效,sql,sql-server,oracle,tsql,Sql,Sql Server,Oracle,Tsql,以下Oracle查询需要迁移到T-SQL,但出现以下错误: ORDER BY子句在视图、内联函数和派生函数中无效 表、子查询和常用表表达式(除非为TOP)、偏移量 也为XML指定了or Oracle可以毫无错误地处理下面的代码 通过删除订单根本没有帮助 SELECT CREATIONDATE, TITLE, SUM(myindex) over (ORDER BY CREATIONDATE ROWS UNBOUNDED PRECEDING) AS cumula FROM ( SELECT CREA
SELECT CREATIONDATE, TITLE, SUM(myindex) over (ORDER BY CREATIONDATE ROWS UNBOUNDED PRECEDING) AS cumula
FROM (
SELECT CREATIONDATE, TITLE, 1 as myindex
FROM CONTENT
WHERE CONTENTID in (
SELECT CONTENTID
FROM CONTENT_LABEL
WHERE LABELID in (SELECT LABELID FROM LABEL WHERE name = 'retrospective')
)
AND CONTENTTYPE = 'PAGE'
AND CONTENT_STATUS = 'current'
ORDER BY CREATIONDATE)
确切的错误是:ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML
你能帮我把查询迁移到SQL吗?
谢谢,如错误消息中所示,您不能使用ORDER BY对派生表中的行进行排序 结果集中的行顺序由外部SELECT中的order by子句控制,而不是OVER子句控制
OVER子句指定执行窗口函数计算的逻辑顺序。它也不会对结果集进行排序 您在这里面临两个问题 1正如其他一些人所指出的,子查询中CREATIONDATE的顺序必须更改 2 SQL Server以及Postgres和其他可能的应用程序都要求在子查询位于FROM子句中时为其添加别名。这是在您通过获取订单后它抛出的语法错误。你可以叫它任何东西。当我不在乎时,我的默认值是“s”,用于子查询
SELECT CREATIONDATE, TITLE, SUM(myindex) over (ORDER BY CREATIONDATE ROWS UNBOUNDED PRECEDING) AS cumula
FROM
(
SELECT CREATIONDATE, TITLE, 1 as myindex
FROM CONTENT
WHERE CONTENTID in
(
SELECT CONTENTID
FROM CONTENT_LABEL
WHERE LABELID in (SELECT LABELID FROM LABEL WHERE name = 'retrospective')
)
AND CONTENTTYPE = 'PAGE'
AND CONTENT_STATUS = 'current'
/*ORDER BY CREATIONDATE*/
) AS s; --<--- Five extra characters, and you should be good to go.
不要使用子查询。没有必要。或通过删除订单。在大多数情况下,它在子查询中都是无用的。order by应该在子查询select之外,因为错误是“Where's you GROUP by”?将order by结果删除到:附近的语法不正确。有什么想法吗?@Larnu,这是一个窗口总数,可以创建一个连续总数。他不需要一群人,谢谢你,埃里克。你关于子查询别名的评论是个救命稻草。