Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle到SQL Server查询迁移结果为:ORDER BY子句在视图、内联函数和派生表中无效_Sql_Sql Server_Oracle_Tsql - Fatal编程技术网

Oracle到SQL Server查询迁移结果为:ORDER BY子句在视图、内联函数和派生表中无效

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

以下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 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,这是一个窗口总数,可以创建一个连续总数。他不需要一群人,谢谢你,埃里克。你关于子查询别名的评论是个救命稻草。