在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
我怀疑您要使用的是解析函数(RANKDENSE_RANK或ROW_NUMBER),即
DENSE_RANK
ROW_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