ROWNUM在T-SQL中作为伪列等价物?
当使用ROWNUM作为伪列时,如何使用T-SQL编写以下查询?这是完整的查询。我意识到它是用PL/SQL编写的,我需要更改添加对象ROWNUM在T-SQL中作为伪列等价物?,sql,sql-server,oracle,tsql,plsql,Sql,Sql Server,Oracle,Tsql,Plsql,当使用ROWNUM作为伪列时,如何使用T-SQL编写以下查询?这是完整的查询。我意识到它是用PL/SQL编写的,我需要更改添加对象 BASE AS ( SELECT NULL AS ES_CMPNY_STATUS_KEY ,CSG.CMPNY_STATUS_GROUP ,CSG.CMPNY_STATUS_GROUP_ID ,CSG.CMPNY_STATUS_REASON ,CSG.CMPNY_STATUS_REASON_ID ,CSF.CMPNY_CURRENT_STATUS
BASE AS (
SELECT NULL AS ES_CMPNY_STATUS_KEY
,CSG.CMPNY_STATUS_GROUP
,CSG.CMPNY_STATUS_GROUP_ID
,CSG.CMPNY_STATUS_REASON
,CSG.CMPNY_STATUS_REASON_ID
,CSF.CMPNY_CURRENT_STATUS_FLAG
,TRUNC(SYSDATE) AS LOAD_DATE
FROM CMPNY_STATUS_GROUP CSG
CROSS JOIN CMPNY_CURRENT_STATUS_FLAG CSF
ORDER BY CSG.CMPNY_STATUS_GROUP, CSG.CMPNY_STATUS_REASON
)SELECT ROWNUM AS ES_CMPNY_STATUS_KEY
,CMPNY_STATUS_GROUP
,CMPNY_STATUS_GROUP_ID
,CMPNY_STATUS_REASON
,CMPNY_STATUS_REASON_ID
,CMPNY_CURRENT_STATUS_FLAG
,LOAD_DATE
FROM BASE B
UNION
SELECT 0 AS ES_CMPNY_STATUS_KEY
,NULL AS CMPNY_STATUS_GROUP
,0 AS CMPNY_STATUS_GROUP_ID
,NULL AS CMPNY_STATUS_REASON
,0 AS CMPNY_STATUS_REASON_ID
,0 AS CMPNY_CURRENT_STATUS_FLAG
,TRUNC(SYSDATE) AS LOAD_DATE
FROM DUAL
使用行号:
请注意,需要order by。实际上,select null会出现,以避免任何额外的排序。不过,一般来说,您会包含一列,指定所需数据的排序顺序。谢谢您提供的信息。现在我得到了一个错误:Msg 1033,Level 15,State 1,第142行ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。它引用了一个CTE。请编辑您的问题以包含完整的查询。@PJ.SQL。这是另一个问题。我建议您再问一个问题。@PJ.SQL我面临的错误与ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效相同,除非还指定了TOP、OFFSET或FOR XML。使用提供的解决方案后,您最终如何解决?这是MS T-SQL还是Oracle PL-SQL?转换为T-SQL语法的是PL/SQL。因此,您当前使用的是Oracle数据库,但您正在转换为MS SQL Server?这就是您的问题。从您的CTE中删除CSG.CMPNY_状态_组、CSG.CMPNY_状态_原因的订单。您将希望以基本为。。。我建议大家联合起来,而不仅仅是联合。你需要CTE吗?我想你可以在没有CTE的情况下进行查询。
select row_number() over (order by (select null)) as ES_CMPNY_STATUS_KEY