Je lis un vieux code au travail et j'ai remarqué qu'il y a plusieurs vues avec une order by 1
clause. Qu'est-ce que cela accomplit?
Exemple:
Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME CONDITION) AS SUM_X,
(SELECT SUM(paymentamount)
FROM payment B
WHERE PAYMENT_DATE = B.PAYMENT_DATE
and SOME OTHER CONDITION) AS SUM_Y
FROM payment A
ORDER BY 1;
sql
sql-order-by
écho
la source
la source
ORDER BY
dans unVIEW
. Le SQL standard ne le permet pas. SQL Server l'interdit depuis 2005. Pour les implémentations SQL qui le permettent, le comportement est largement non documenté et contre-intuitif. En d'autres termes, à éviter définitivement.TOP
est présent, et SSMS aime ajouterTOP 100 PERCENT
.CHECK
contrainte dans aCREATE TABLE
mais il ne l'honorera pas réellement - il n'est jamais vérifié! La question est la suivante: est-ce que ces produits SQL respectent toujours lesORDER BY
vues in, par exemple lorsqu'ils sont utilisés dans une requête qui comporte également unORDER BY
trié deux fois? Documentent-ils même le comportement ou devez-vous regarder les plans d'exécution pour le résoudre? Je pense que nous connaissons les réponses;)ORDER BY 1
... en utilisant une astuce d'application croisée où vous voulez un alias vide. Malheureusement, le code, par exemple, est trop gros pour un commentaire, je l'ai donc posté en tant que réponse ci-dessous FYI.Réponses:
Ce:
... est appelé "Ordinal" - le nombre représente la colonne en fonction du nombre de colonnes défini dans la clause SELECT. Dans la requête que vous avez fournie, cela signifie:
Ce n'est pas une pratique recommandée, car:
la source
sql
étiquette. En SQL standard, seuls les noms de corrélation de colonne sont autorisés dans laOREDER BY
clause car, en théorie, les noms de corrélation de table sont hors de portée, c'est-à-dire qu'ils devraient l'êtreORDER BY PAYMENT_DATE;
. Bien entendu, toutes les implémentations SQL ne sont pas conformes aux standards.;WITH cte AS( SELECT 1 AS Col1, 'z' AS Col2 UNION SELECT 2 AS Col1, 'y' AS Col2 UNION SELECT 3 AS Col1, 'x' AS Col2 ) SELECT Col2, Col1 FROM cte ORDER BY 1
Ceci est utile lorsque vous utilisez des opérateurs basés sur des ensembles, par exemple union
la source
order by tablea.cola
cela signifie simplement trier la vue ou la table par 1ère colonne du résultat de la requête.
la source
Je crois en Oracle, cela signifie ordre par colonne n ° 1
la source
Cela triera vos résultats selon la première colonne renvoyée. Dans l'exemple, il triera par date_paiement.
la source
Comme mentionné dans les autres réponses
ORDER BY 1
ordonnées par la première colonne.Je suis tombé sur un autre exemple où vous pourriez l'utiliser. Nous avons certaines requêtes qui doivent être ordonnées, sélectionnez la même colonne. Vous obtiendrez une erreur SQL si vous passez commande
Name
ci-dessous.la source
Regarde aussi:
http://www.techonthenet.com/sql/order_by.php
Pour une description de la commande par. J'ai appris quelque chose! :)
J'ai également utilisé cela dans le passé lorsque je voulais ajouter un nombre indéterminé de filtres à une instruction SQL. Sloppy je sais, mais cela a fonctionné. : P
la source
Un exemple ici tiré d'un exemple de base de données de serveur WAMP de test: -
Et quand il est donné supplémentaire
order by PRIVILEGE_TYPE
ou peut être donnéorder by 3
. Notez que la 3e colonne (PRIVILEGE_TYPE
) est triée par ordre alphabétique.DEFINITIVEMENT, une longue réponse et beaucoup de défilement. J'ai également eu du mal à transmettre la sortie des requêtes à un fichier texte. Voici comment faire cela sans utiliser la
into outfile
chose ennuyeuse-Et lorsque vous avez terminé, arrêtez la journalisation-
J'espère que cela ajoute plus de clarté.
la source