ROWNUM 作为 T-SQL 中等效的伪列?

PJ.*_*SQL 4 sql t-sql sql-server oracle 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_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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

使用row_number()

select row_number() over (order by (select null)) as ES_CMPNY_STATUS_KEY
Run Code Online (Sandbox Code Playgroud)

请注意,order by是必需的。的(select null)出现-实践-以避免任何额外的排序。但是,一般而言,您会包含一个列,用于指定所需数据的排序顺序。