SQL pour retourner le numéro de rangée d'une ligne spécifique? (à l'aide d'Oracle db)
Dans Oracle 10g, j'ai cette SQL:
select dog.id as dogId from CANINES dog order by dog.codename asc
qui retourne:
id
--
204
203
206
923
Je veux prolonger cette requête pour déterminer l'oracle rownum d'un chien.id dans ce jeu de résultats.
J'ai essayé
select rownum from
(select dog.id as dogId from CANINES dog order by dog.codename asc)
where dog.id=206
Mais cela ne fonctionne pas très bien (il retourne 1, n'importe quel chien.id je match). Je m'attendais à revenir 3.
Merci pour votre aide!
Notes
http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
Je suis assez sûr que je n'ai pas besoin d'utiliser rowid
Vous devez vous connecter pour publier un commentaire.
Je soupçonne ce que vous voulez est d'utiliser une fonction analytique (RANG,
DENSE_RANK
, ouROW_NUMBER
), c'est à direSi la colonne ID dans les CANINES de la table n'étaient pas uniques, GRADE,
DENSE_RANK
, etROW_NUMBER
) permettrait de traiter les liens différemment.Si vous voulez le faire uniquement avec ROWNUM,
Si vous êtes après l'identificateur unique de chaque ligne dans la table que vous avez besoin ROWID, pas ROWNUM.
ROWNUM est un pseudo-colonne qui peut changer à chaque fois un peu de SQL est exécutée (c'est fonctionné au moment de la requête)
Voir si cela fonctionne pour vous:
Réponse
Résultats
DDL
Pour ce faire, il serait préférable de modifier la table et ajouter une séquence. Cela pourrait se collant si vous avez l'intention de supprimer des lignes. Où, peut-être une meilleure pratique serait d'utiliser une colonne de statut ou de et de début-date de fin de motif de décider quelles lignes sont actives et doit être retourné.