Группировать по пробелам значения и считать их - PullRequest
2 голосов
/ 19 июля 2011

У меня есть таблица, содержащая сообщения, полученные для наших клиентов, и мне нужно найти список 50 наиболее часто используемых слов.

Таблица называется Messages, набранное сообщение - Message. По сути, я хочу SELECT всех строк, рекурсивно разделить каждый Message на пробелы, чтобы получить все слова, GROUP BY каждое слово и COUNT их. Я борюсь за рекурсивное расщепление пробелом - есть идеи?

1 Ответ

3 голосов
/ 19 июля 2011
DECLARE @Table TABLE (userID INT,MESSAGE NVARCHAR(MAX))
INSERT INTO @Table
SELECT '1','word1 word2 word3' UNION ALL
SELECT '1','word2 word5 word4' UNION ALL
SELECT '2','word5 word2 word1' UNION ALL
SELECT '2','word1 word2 word3'

; WITH c AS(
SELECT N.Value,COUNT(N.Value) Cnt FROM 
@Table T
CROSS APPLY
dbo.split(T.message,' ') N
GROUP BY N.Value
)
SELECT  c.Value,c.Cnt
FROM    c
ORDER BY Cnt DESC

Результат:

enter image description here

Примечание: вам нужна функция разделения, которую вы можете найти в многочисленных примерах в Интернете.Например, см. Здесь: Эквивалент сплит-функции в T-SQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...