9
votes

Comment trier dans une vue SQL

J'ai créé une vue SQL et j'ai besoin de trier les résultats de sélection à l'aide de la commande par 4 champs, mais je reçois un message que la commande par ne peut pas être utilisée dans des vues, à moins que j'utilise haut. Quelqu'un peut-il expliquer pourquoi le haut est nécessaire et quelqu'un a une solution de contournement pour trier dans une vue SQL?

merci.


0 commentaires

5 Réponses :


-1
votes

Si vous utilisez SQL Server, vous pouvez faire

select top 100 percent * 
from MyTable 
order by MyColumn


5 commentaires

Depuis 2005, l'optimiseur SQL supprime cette commande de sorte que cela ne fonctionne pas! Soyez prudent avec ça.


Bien sur! Directement de l'équipe SQL Server Query Optimizer: blogs.msdn.com /queryroptteam/archive/2006/03/24/560396.aspx


Merci, je n'ai pas utilisé cela depuis SQL 2000 jours - je suis d'accord avec certains des commentaires sur cette page que l'ordre d'ordre devrait être illégal puisqu'il n'est pas toujours honoré.


Le "top 100%" travaillé. Et il semble que le correctif est dans le tri car il trie correctement par les 4 champs. Merci pour toutes les réponses de l'aide. Erwin


Si cela fonctionne, c'est purement par hasard. Ne soyez pas surpris quand à l'avenir, votre logique basée sur ces pauses.



18
votes

Vous n'avez pas besoin de trier une vue. Une vue est comme une table pour que vous puissiez le trier lorsque vous en sélectionnez:

select * from yourView order by yourColumns


0 commentaires

6
votes

Il n'y a aucune garantie que la sortie de la vue sera commandée

Seul l'ordre ultérieur en s'applique pour les ensembles de résultats: non intérieurs. Donc, seule cette commande par peut être garantie de fonctionner: xxx

Vous pouvez l'ajouter aux vues ou aux tables dérivées et il oblige " matérialisation intermédiaire " car les résultats doivent être commandés. Toutefois, pour SQL Server 2005 et ci-dessus, vous devez utiliser TOP 2000000000 PAS TOP 100% (sauf pour ce HF que Daniel Vassallo a mentionné!)

Quelqu'un sera utiliser votre vue avec un ordre différent à celui interne à un moment donné.


0 commentaires

2
votes

Vous pouvez essayer:

CREATE VIEW View_Products
AS
SELECT ProductID, ProductName, UnitPrice, CreateDate FROM Products
Order by CreateDate DESC
OFFSET 0 ROWS


0 commentaires

0
votes

créerait un index sur la colonne avec laquelle vous avez l'intention de trier l'aide de la vue?


0 commentaires