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?
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
.
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;
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%'
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%';