Sql 按空格分隔的值分组并计数

Sql 按空格分隔的值分组并计数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表,其中包含了为我们的客户收集的信息,我基本上需要找到最常用的50个单词的列表 该表称为消息,键入的消息为消息。实际上,我想选择所有行,递归地按空格分割每条消息,以获得所有单词,按每个单词分组,并计数它们。我在用一个空间递归地分割,有什么想法吗 DECLARE @Table TABLE (userID INT,MESSAGE NVARCHAR(MAX)) INSERT INTO @Table SELECT '1','word1 word2 word3' UNION ALL SELECT

我有一个表,其中包含了为我们的客户收集的信息,我基本上需要找到最常用的50个单词的列表

该表称为
消息
,键入的消息为
消息
。实际上,我想
选择所有行,递归地按空格分割每条
消息
,以获得所有单词,
按每个单词分组,并
计数它们。我在用一个空间递归地分割,有什么想法吗

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
结果:


注意:您需要拆分函数,您可以在Internet上的许多示例中找到该函数。例如,请参见此处:

您不需要递归拆分…拆分是线性的。只有在使用递归函数拆分拆分时,拆分才是线性的。所以你需要复发。