75 votes

Erreur SQL avec Order By dans la sous-requête

Im working sql server 2005.

Ma requête est:

 SELECT (
SELECT COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
GROUP BY refKlinik_id
ORDER BY refKlinik_id) as dorduncuay
 

Et l'erreur: la clause ORDER BY n'est pas valide dans les vues, les fonctions en ligne, les tables dérivées, les sous-requêtes et les expressions de table courantes, sauf si TOP ou FOR XML est également spécifié.

Comment puis-je utiliser order by dans une sous-requête?

118voto

Tomalak Points 150423

Voici l'erreur que vous obtenez (c'est moi qui souligne):

La clause ORDER BY n'est pas valide dans les vues, les fonctions en ligne, les tables dérivées, les sous-requêtes et les expressions de table courantes, sauf si TOP ou FOR XML est également spécifié.

Alors, comment pouvez-vous éviter l'erreur? En spécifiant TOP, ce serait une possibilité, je suppose.

 SELECT (
  SELECT TOP 100 PERCENT
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay
 

37voto

Patrick Points 846

Outre le fait que la commande par ne semble pas donner un sens à votre requête.... Pour utiliser order by dans une sous-sélection, vous aurez besoin d'utiliser des 2147483647.

SELECT (
  SELECT TOP 2147483647
  COUNT(1) FROM Seanslar WHERE MONTH(tarihi) = 4
  GROUP BY refKlinik_id
  ORDER BY refKlinik_id
) as dorduncuay

Ma compréhension est que les "TOP 100 pour CENT" n'a pas de garantie de la commande de plus à partir de SQL 2005:

Dans SQL Server 2005, la COMMANDE PAR la clause dans la définition d'une vue est utilisé seulement pour déterminer les lignes renvoyé par la clause TOP. L'ORDRE PAR la clause ne garantit pas commandé les résultats lorsque la vue est interrogée, sauf si l'ORDRE EN est également précisé dans l' la requête elle-même.

Voir SQL Server 2005 dernières modifications

Espérons que cela aide, Patrick

5voto

cjk Points 27463

Vous n'avez pas besoin de commander par dans votre sous-requête. Déplacez-le dans la requête principale et incluez la colonne que vous souhaitez classer dans la sous-requête.

cependant, votre requête ne fait que renvoyer un décompte, donc je ne vois pas l'intérêt de la commande par.

2voto

AakashM Points 32891

Dans cet exemple, la commande n'ajoute aucune information - le COUNT d'un ensemble est le même quel que soit l'ordre dans lequel il se trouve!

Si vous sélectionnez quelque chose qui ne dépend ordre, vous devez faire l' une des choses que le message d'erreur vous indique - TOP utilisation ou FOR XML

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X