使用Group By时发生SQL错误:每个Group By表达式必须至少包含一个非外部引用的列

使用Group By时发生SQL错误:每个Group By表达式必须至少包含一个非外部引用的列,sql,group-by,Sql,Group By,我在做我认为可能是最简单的查询时遇到了这个错误!我看到其他人在这里也遇到了问题,我看过了我看到的每一个解决方案,但他们有更多涉及的问题,所以我很难找出问题。我做了一个小表格来说明我的问题 表名:grouptest id name 1 Mel 2 Lucy 3 Mandy 4 Mel 5 Mandy 6 Mel 我想找出每个名称出现的次数,以生成如下表: 3 Mel 2 Mandy 1 Lucy 以下是我认为可行的问题: SELECT Count(id), Name

我在做我认为可能是最简单的查询时遇到了这个错误!我看到其他人在这里也遇到了问题,我看过了我看到的每一个解决方案,但他们有更多涉及的问题,所以我很难找出问题。我做了一个小表格来说明我的问题

表名:grouptest

id  name
1   Mel
2   Lucy
3   Mandy
4   Mel
5   Mandy
6   Mel
我想找出每个名称出现的次数,以生成如下表:

3 Mel
2 Mandy
1 Lucy
以下是我认为可行的问题:

SELECT Count(id), Name
FROM groupbytest
GROUP BY 'Name'
我得到了一个错误:

每个GROUP BY表达式必须至少包含一个不可用的列 外部参照物

救命啊

您想要:

SELECT Count(id), [Name]
FROM groupbytest 
GROUP BY [Name]
GROUP BY'Name'
尝试在文本字符串'Name'上分组,而不是在列
Name
上分组


Name
也可能是一个保留字,因此它周围有括号,不过最好不要调用
Name
列在
分组方式上丢失

SELECT Count(id), Name 
FROM groupbytest 
GROUP BY Name
如果
name
text
,则需要将其强制转换为
VARCHAR
,但可能会截断列

SELECT Count(id), CAST(Name AS VARCHAR(8000)) AS Name
FROM groupbytest 
GROUP BY CAST(Name AS VARCHAR(8000))

名称字段周围有引号,这是不需要的

SELECT Count(id), Name
FROM grouptest
GROUP BY Name
根据您的评论,您需要
CAST
您的
Name
列:

SELECT Count(id), Cast(Name as Varchar(max)) Name
FROM grouptest
GROUP BY Cast(Name as Varchar(max))

如果丢失了,则会出现以下错误:文本、ntext和图像数据类型无法进行比较或排序,除非使用IS NULL或LIKE运算符。@Mel-在这种情况下,消息是清楚的。不能按该数据类型的列进行分组。您可以尝试强制转换为
VARCHAR
first@bluefeet-:-)你今天也在一个问题上打败了我我更改了列名只是为了消除这种可能性,但是添加括号给我的错误与我没有的时候一样,文本、ntext和图像数据类型无法进行比较或排序,除非使用IS NULL或LIKE运算符。然后需要将
Name
列强制转换为varchar。是!如果你有时间,你能解释一下为什么这样做是必要的吗?还感谢您的快速响应。@Mel问题是您试图按不允许的数据类型对数据进行分组。表中有文本、ntext或图像字段。您需要使用可以分组的数据类型。我使用
varchar(max)
将数据转换为允许的类型。您也可以将其转换为
nvarchar(max)