213 votes

Comment utiliser ROW_NUMBER() ?

Je veux utiliser le ROW_NUMBER() pour obtenir...

  1. Pour obtenir le max(ROW_NUMBER()) --> Ou je suppose que ce serait aussi le compte de toutes les lignes.

J'ai essayé de le faire :

SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users

mais ça ne semble pas fonctionner...

  1. Pour obtenir ROW_NUMBER() en utilisant un élément d'information donné, par exemple, si j'ai un nom et que je veux savoir de quelle rangée provient ce nom.

Je suppose que ce serait quelque chose de similaire à ce que j'ai essayé pour le numéro 1.

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'

mais cela n'a pas fonctionné non plus...

Des idées ?

7voto

Jyo Points 157

Ce n'est peut-être pas lié à la question posée ici. Mais j'ai trouvé que cela pouvait être utile lorsque vous utilisez ROW_NUMBER -

SELECT *,
ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Any_ID 
FROM #Any_Table

6voto

Hari Lakkakula Points 45
select 
  Ml.Hid,
  ml.blockid,
  row_number() over (partition by ml.blockid order by Ml.Hid desc) as rownumber,
  H.HNAME 
from MIT_LeadBechmarkHamletwise ML
join [MT.HAMLE] h on ML.Hid=h.HID

3voto

Alex Martelli Points 330805
SELECT num, UserName FROM 
 (SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
  From Users) AS numbered
WHERE UserName='Joe'

3voto

Johnson Pham Points 21

Vous pouvez utiliser Row_Number pour limiter le résultat de la requête.

Exemple :

SELECT * FROM (
    select row_number() OVER (order by createtime desc) AS ROWINDEX,* 
    from TABLENAME ) TB
WHERE TB.ROWINDEX between 0 and 10

-- Avec la requête ci-dessus, je vais obtenir la PAGE 1 des résultats de TABLENAME .

2voto

En prenant votre titre au pied de la lettre, voici un article de blog qui explique les fonctions dites de fenêtre (où row_number est l'une d'entre elles) :

http://www.depesz.com/index.php/2009/01/21/waiting-for-84-window-functions/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X