J'ai reçu cette erreur lorsque je pensais être l'une des requêtes les plus simples possibles! Je vois que d'autres personnes ont également rencontré des problèmes ici et j'ai parcouru chaque solution que j'ai vue, mais ils sont avec des requêtes plus impliquées, il était donc très difficile de choisir le problème. J'ai fait une petite table factice pour illustrer mon problème.
Nom de la table: groutest p> Je veux savoir combien de fois chaque nom apparaît, pour produire une table Comme: p> voici la requête que je pense devoir fonctionner: p> et je reçois l'erreur: p> Chaque groupe par expression doit contenir au moins une colonne qui n'est pas
une référence extérieure. P>
blockQuote> aide! p> p>
3 Réponses :
Vous voulez: groupe par "nom" code> essaie de grouper sur la chaîne littérale "nom", pas la colonne
nom code> >. p>
nom code> peut également être un mot réservé, d'où les crochets autour de lui, bien que vous feriez mieux d'appeler la colonne
nom code>. < / p> p>
J'ai changé le nom de la colonne juste pour éliminer cette possibilité, mais l'ajout de crochets me donne la même erreur que lorsque je n'ai pas que les types de données texte, Ntext et d'image ne peuvent pas être comparés ou triés, sauf lorsque vous utilisez NULL ou comme opérateur.
Ensuite, vous devez lancer la colonne code> nom code> sur un varchar.
perdre le si ' code> sur le groupe
par code>:
nom code> est un
Texte code>, alors vous devez le jeter vers
Varchar CODE>, mais vous pouvez tronquer votre colonne. P>
SELECT Count(id), CAST(Name AS VARCHAR(8000)) AS Name
FROM groupbytest
GROUP BY CAST(Name AS VARCHAR(8000))
Si je perds les types d'erreur, je reçois cette erreur: les types de données texte, Ntext et image ne peuvent pas être comparés ni triés, sauf lors de l'utilisation de NULL ou d'un opérateur similaire.
@Mel - Dans ce cas, le message est clair. Vous ne pouvez pas grouper par une colonne de ce type de données. Vous pouvez essayer de casting à varchar code> d'abord
@Bluefeet - :-) Vous m'avez également battu sur un aujourd'hui
Vous avez citations autour du champ Nom inutile. en fonction de vos commentaires, vous devez CAST CODE> Votre
Nom code> Colonne: P>
SELECT Count(id), Cast(Name as Varchar(max)) Name
FROM grouptest
GROUP BY Cast(Name as Varchar(max))
Oui! Cela a fonctionné parfaitement :) Si vous avez le temps, pourriez-vous expliquer pourquoi cela a fonctionné / est nécessaire? Merci également pour une telle réponse rapide.
@Mel Le problème était que vous essayiez de regrouper les données par un type de données qui n'est pas autorisé. Vous avez eu un champ de texte, ntext ou image dans votre table. Vous devez utiliser un type de données pouvant être regroupé. J'ai utilisé le varchar (max) code> pour convertir vos données en un type autorisé. Vous auriez pu le jeter à un
nvarchar (max) code> aussi.