小编典典

SQL返回特定行的rownum?(使用Oracle数据库)

sql

在Oracle 10g中,我有以下SQL:

select dog.id as dogId from CANINES dog order by dog.codename asc

返回:

id
--
204
203
206
923

我想扩展此查询以确定此结果集中的dog.id的oracle rownum。

我试过了

select rownum from 
(select dog.id as dogId from CANINES dog order by dog.codename asc) 
where dog.id=206

但这并不能很好地解决(无论我匹配哪个dog.id,它都返回1)。我原本希望回来3。

谢谢你的帮助!


笔记

http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html

我很确定我不需要使用rowid


阅读 45

收藏
2021-04-28

共1个答案

小编典典

我怀疑您要使用的是解析函数(RANKDENSE_RANKROW_NUMBER),即

SELECT rnk
  FROM (select dog.id as dogId,
               ROW_NUMBER() OVER( ORDER BY dog.codename ASC ) rnk
          from CANINES dog )
 WHERE dogId = 206

如果CANINES表中的ID列不是唯一的,则RANK DENSE_RANK,和ROW_NUMBER)将对领带进行不同的处理。

如果您只想使用ROWNUM进行此操作,

SELECT rn
  FROM (
        SELECT dogId, rownum rn
          FROM (select dog.id as dogId
                  from CANINES dog 
                 order by dog.codename ASC) inner
       ) middle
 WHERE dogId = 206
2021-04-28