Combine l'ORDRE ET PAR l'UNION dans SQL Server
Comment puis-je obtenir premier enregistrement de la table et les derniers enregistrements d'une table dans un jeu de résultats?
Cette Requête échoue
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC
Toute aide?
Vous devez vous connecter pour publier un commentaire.
Mettre votre
order by
ettop
déclarations dans les sous-requêtes:SELECT * FROM ( SELECT * FROM CTEWithNDCNotNull ORDER BY NDC ASC ) AS NDCNotNull UNION SELECT * FROM ( SELECT * FROM CTEWithNDCNull ORDER BY GPI ASC ) AS NDCNull
Comment puis-je corriger cela?top
après la sous-requêteselect
. Vous ne pouvez pas régler uneunion
sans spécifier le nombre de lignes que vous voulez.TOP
? alors, quelle est l'option si je ne sais pas combien de lignes que je veux?top (@limit)
. Vous pourriez probablement utiliser rang par-dessus, mais il serait beaucoup plus compliqué et pas plus rapide. Cette requête est rapide aussi longtemps que la colonne est indexée.Si vous travaillez sur SQL Server 2005 ou plus tard:
Le seul endroit ce ne sera pas comme l'original de votre requête est de savoir si il n'y a qu'une seule ligne dans la table (dans ce cas, ma réponse renvoie une ligne, tandis que la vôtre serait de retour la même ligne deux fois)
union all
avecunion
. Il pourrait être intéressant de comparer entre eux dans la requête de l'analyseur.ORDER BY
clause dans le premier énoncé, donc siId
est un int, mais pas triés, vous n'obtiendrez pas que la "première"Id
, juste un hasard. Supposons que votre colonne Id est9 7 4 8 3 1
Votre requête sera de retour le 9 dans les deux ensembles parce que 9 est le premier dans la colonne lorsque vous n'avez pas de tri à tous, mais aussi le premier lors d'un tri décroissant.