7
votes

Erreur SQL lors de l'utilisation de groupe par: Chaque groupe par expression doit contenir au moins une colonne qui n'est pas une référence extérieure

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 xxx

Je veux savoir combien de fois chaque nom apparaît, pour produire une table Comme: xxx

voici la requête que je pense devoir fonctionner: xxx

et je reçois l'erreur:

Chaque groupe par expression doit contenir au moins une colonne qui n'est pas une référence extérieure.

aide!


0 commentaires

3 Réponses :


0
votes

Vous voulez: xxx

groupe par "nom" essaie de grouper sur la chaîne littérale "nom", pas la colonne nom >.

nom peut également être un mot réservé, d'où les crochets autour de lui, bien que vous feriez mieux d'appeler la colonne nom . < / p>


2 commentaires

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 nom sur un varchar.



5
votes

perdre le ' code> sur le groupe par code>: xxx pré>

si 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))


3 commentaires

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 d'abord


@Bluefeet - :-) Vous m'avez également battu sur un aujourd'hui



7
votes

Vous avez citations autour du champ Nom inutile. xxx pré>

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))


2 commentaires

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) pour convertir vos données en un type autorisé. Vous auriez pu le jeter à un nvarchar (max) aussi.