SQL fonction Row_Number() dans la Clause where sans ORDONNANCE PAR?

J'ai trouvé un tas de questions sur ce sujet avec de belles solutions, mais aucun d'eux de quoi faire si les données ne doit pas être commandé dans une manière spécifique. Par exemple, la requête suivante:

WITH MyCte AS 
(
    select   employee_id,
             RowNum = row_number() OVER ( order by employee_id )
    from     V_EMPLOYEE 
    ORDER BY Employee_ID
)
SELECT  employee_id
FROM    MyCte
WHERE   RowNum > 0

fonctionne bien si les données doivent être commandés par employee_id. Mais que faire si mes données ne disposent pas d'ordre précis, mais les numéros des lignes elles-mêmes agissent comme un ID? Mon but est d'écrire une requête comme ceci (avec le Row_Number() fonction ayant pas de ORDER BY clause):

WITH MyCte AS 
(
    select   employee_id,
             RowNum = row_number() OVER ( <PRESERVE ORIGINAL ORDER FROM DB> )
    from     V_EMPLOYEE 
    ORDER BY Employee_ID
)
SELECT  employee_id
FROM    MyCte
WHERE   RowNum > 0

EDIT: Après recherche sur Google, j'ai compris que ce n'est pas vraiment possible. Certains suggèrent une solution pour cela?

  • Sauf si vous avez explicitement ORDER BY clause, il est PAS implicite de la commande (il n'est pas "d'origine afin de DB") dans un environnement SQL Server
  • Je vous remercie. Juste pour clarifier, voulez-vous dire, dans une petite base de données de dire, 20000 dossiers, il ne permet pas de conserver l'ordre d'insertion (même si il n'y a pas insertions simultanées)?
  • Vous êtes de droite. Même pendant séquentielle insère, il ne conserve pas l'ordre. C'est très différent de mon MySQL expérience. Merci pour le heads up!
InformationsquelleAutor Legend | 2011-06-17