Requête SQL Avec la fonction Row_Number, order by et la clause where
J'ai de la requête SQL suivante:
select
ID, COLUMN1, COLUMN2
from
(select ID, COLUMN1, COLUMN2, row_number() over (order by 2 DESC) NO from A_TABLE)
where
NO between 0 and 100
Ce que je suis en train de faire est de sélectionner les 100 premiers enregistrements de la requête
select ID, COLUMN1, COLUMN2 from ATABLE order by 2 DESC
Et voici les problèmes:
- Apparemment, le
order by
clause n'est pas de travail. J'ai remarqué que j'ai à ajouter un autreorder by 2 DESC
clause, juste après(...) from ATABLE
, pour ma requête fonctionne. Est-il quelque chose que je fais mal? Ou est-ce un comportement attendu? - Comment puis-je ajouter un
where
clause? Disons que j'ai besoin de sélectionner seulement les 100 premiers enregistrements de la tablewhere COLUMN1 like '%value%'
. J'ai essayé d'ajouter la clause where après(...) from ATABLE
mais il se produit une erreur...
Aider? Merci.
PS: je suis sous Oracle 10g R2.
Vous pouvez réellement comprendre l'autre des requêtes que vous avez essayé au lieu de simplement expliquer? Il pourrait rendre plus facile de repérer le problème.
OriginalL'auteur Bogdan M | 2009-05-07
Vous devez vous connecter pour publier un commentaire.
rownum est un pseudo-colonne qui compte les lignes du jeu de résultats après où la clause a été appliquée.
Est-ce que vous essayez d'obtenir?
Parce que c'est un pseudo colonne qui est strictement un compteur de lignes résultant de la clause where, il ne vous permettra pas de faire de la pagination (c'est à dire entre 200 & 300).
C'est probablement ce que vous cherchez:
Et moi aussi. 🙂
OriginalL'auteur Edward Q. Bridges
Découvrez cet Oracle FAQ. En particulier, cette partie:
Je sais que sur les top-n mais pour l'instant il n'est pas de m'aider, en considérant que j'ai chercher exactement n enregistrements entre valeur1 et valeur2.
Je pensais que c'est ce que ma requête n' 🙂
OriginalL'auteur willcodejavaforfood
Pour répondre à votre première question: Ne pas utiliser un numéro de colonne dans votre clause order by, mais utiliser le nom de la colonne.
Je ne comprends pas tout de votre deuxième question, car l'ajout d'une OÙ dans votre sélection interne devrait faire l'affaire:
P. S. (à willcodejavaforfood) je pense à l'aide de la fonction row_number() est mieux quand vous voulez les lignes à être commandés. Il sauve un point de vue interne (grande victoire pour des raisons de lisibilité).
Édité mon P. S. (retiré la partie sur l'utilisation d'une commande par une sous-requête) car je n'ai pas le prouver, et il sera difficile de construire (si possible...)
OriginalL'auteur
Pourquoi n'utilisez-vous pas
Que faire si j'ai besoin de sélectionner les lignes entre les arguments no_lig 200 et 300 ? C'est pourquoi j'ai essayé d'utiliser les arguments no_lig en premier lieu...
Désolé, je n'ai pas vu que vous étiez à l'aide d'Oracle.
OriginalL'auteur Blerta
Ici, vous obtiendrez le dossier limité à partir de la base de données oracle sans l'utilisation de
rownum
OriginalL'auteur know computer