2013-12-18 3 views
3

Я хотел бы видеть, сколько раз поле MSGTEXT повторяется в таблице MMOUTBOUND. Для этого я использую следующий запрос:GROUP BY для данных ntext

SELECT 
    MSGTEXT, 
    COUNT(*) TotalCount 
FROM MMOUTBOUND 
GROUP BY MSGTEXT 
HAVING COUNT(*)>1; 

Но я получаю сообщение об ошибке, потому что NTEXT типы данных не могут быть сравнены или отсортированы. Как я могу достичь этого для типа данных ntext?

+1

'ntext',' Text' и 'типы image' данные будут удалены в будущей версии SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте изменять приложения, которые в настоящее время их используют. Вместо этого используйте 'nvarchar (max)', 'varchar (max)' и 'varbinary (max)'. [См. Подробности здесь] (http://msdn.microsoft.com/en-us/library/ms187993.aspx) - прекратите использование 'Ntext' прямо сейчас - замените его на' nvarchar (max) ', а затем вы иметь возможность сравнивать и сортировать по этим столбцам! –

ответ

8

Вы не можете напрямую, для всей колонки. Однако, косвенно, вы можете преобразовать первые N символов и группу вместо этого, например,

SELECT CONVERT(NVARCHAR(100), MSGTEXT), COUNT(*) TotalCount 
FROM MMOUTBOUND 
GROUP BY CONVERT(NVARCHAR(100), MSGTEXT) 
HAVING COUNT(*)>1; 

Как уже отмечалось, обратите внимание, что вы должны преобразовать NTEXT столбцы NVARCHAR(MAX)

+0

Обратите внимание, что решение 'marc_s' должно быть предпочтительнее этого обходного пути на' NTEXT'. NVARCHAR (MAX) можно сгруппировать напрямую, даже для длин NVARCHAR> 4000. [Fiddle here] (http://www.sqlfiddle.com/#!6/aa596/2) – StuartLC