web-dev-qa-db-fra.com

Comment obtenir le numéro de ligne à partir des lignes sélectionnées dans Oracle

Je sélectionne quelques lignes de la base de données, par exemple:

select * from student where name is like %ram%

Résultat:

ID   Name     email          Branch
7    rama    [email protected]    B1
5    ramb    [email protected]    B2
3    ramc    [email protected]    B3
8    ramd    [email protected]    B4
11   rame    [email protected]    B5
12   ramf    [email protected]    B6
14   ramg    [email protected]    B7

J'ai besoin d'obtenir le numéro de ligne pour quelle branche est B5. La valeur attendue est "5"

Quelqu'un peut-il suggérer comment implémenter cela dans la requête?

10
Tushar

Il n'y a aucun ordre inhérent à une table. Ainsi, le numéro de ligne lui-même est une métrique sans signification.

Cependant, vous pouvez obtenir le numéro de ligne d'un jeu de résultats en utilisant ROWNUM = psuedocolumn ou la fonction analytique ROW_NUMBER() , qui est plus puissante.

Comme il n'y a pas de classement dans une table, les deux nécessitent une clause ORDER BY explicite pour fonctionner.

select rownum, a.*
  from ( select *
           from student
          where name like '%ram%'
          order by branch
                ) a

ou en utilisant la requête analytique

select row_number() over ( order by branch ) as rnum, a.*
  from student
 where name like '%ram%'

Votre syntaxe where name is like ... est incorrect, il n'y a pas besoin de l'IS, donc je l'ai supprimé.

ORDER BY repose ici sur un tri binaire, donc si une branche commence par autre chose que B, les résultats peuvent être différents, par exemple b est supérieur à B.

29
Ben

tu peux juste faire

select rownum, l.* from student  l where name like %ram%

cela attribue le numéro de ligne au fur et à mesure que les lignes sont récupérées (donc pas de classement garanti bien sûr).

si vous vouliez d'abord commander:

select rownum, l.*
  from (select * from student l where name like %ram% order by...) l;
10
DazzaL

Je pense en utilisant

select rownum st.Branch 
  from student st 
 where st.name like '%ram%'

est un moyen simple; vous devez ajouter des guillemets simples dans l'instruction LIKE. Si vous utilisez row_number(), vous devez ajouter over (order by 'sort column' 'asc/desc'), par exemple:

select st.branch, row_number() over (order by 'sort column' 'asc/desc')  
  from student st 
 where st.name like '%ram%'
4
boyce

La requête ci-dessous permet d'obtenir le numéro de ligne dans Oracle,

SELECT ROWNUM AS SNO,ID,NAME,EMAIL,BRANCH FROM student WHERE NAME LIKE '%ram%';
2
Srinivasan.S