Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
ROWNUM在T-SQL中作为伪列等价物?_Sql_Sql Server_Oracle_Tsql_Plsql - Fatal编程技术网

ROWNUM在T-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

当使用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_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