我想看看在表MMOUTBOUND
中重复字段MSGTEXT
多少次。对于我使用下面的查询:GROUP BY for ntext data
SELECT
MSGTEXT,
COUNT(*) TotalCount
FROM MMOUTBOUND
GROUP BY MSGTEXT
HAVING COUNT(*)>1;
,但我得到一个错误,因为ntext数据类型不能比较或排序。我怎样才能达到这个ntext数据类型?
我想看看在表MMOUTBOUND
中重复字段MSGTEXT
多少次。对于我使用下面的查询:GROUP BY for ntext data
SELECT
MSGTEXT,
COUNT(*) TotalCount
FROM MMOUTBOUND
GROUP BY MSGTEXT
HAVING COUNT(*)>1;
,但我得到一个错误,因为ntext数据类型不能比较或排序。我怎样才能达到这个ntext数据类型?
您不能直接对整个列。但是,间接地,您可以通过此转换来转换前N个字符和组,例如,
SELECT CONVERT(NVARCHAR(100), MSGTEXT), COUNT(*) TotalCount
FROM MMOUTBOUND
GROUP BY CONVERT(NVARCHAR(100), MSGTEXT)
HAVING COUNT(*)>1;
正如其他人所指出的,请注意,您应将NTEXT
列转换为NVARCHAR(MAX)
请注意,'marc_s'解决方案应该比'NTEXT'更适合这种解决方法。 NVARCHAR(MAX)可以直接分组,即使对于> 4000的NVARCHAR长度也是如此。[Fiddle here](http://www.sqlfiddle.com/#!6/aa596/2) – StuartLC
'ntext','text'和'image'数据类型将在SQL Server的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前正在使用它们的应用程序。改为使用'nvarchar(max)','varchar(max)'和'varbinary(max)'。 [详见这里](http://msdn.microsoft.com/en-us/library/ms187993.aspx) - 立即停止使用'Ntext' - 用'nvarchar(max)'替换它,然后你会还能够在这些列上进行比较和排序! –