2011-07-19 41 views
2

我有一个包含为客户采取的消息的表,我基本上需要找到最常用词的前50列表。按空格分隔的数值组并计数它们

该表被称为Messages,键入的消息是Message。实际上我想要SELECT所有行,递归地将每个Message按空格分割得到所有字,GROUP BY每个字和COUNT它们。我正在努力按照空间递归地分裂 - 任何想法?

+0

您不要递归地分割......分割是线性的。 –

+0

只有您有一个recusive功能来分割它时,分割才是线性的。所以你确实需要recusive。 –

回答

3
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

注意:你需要分割功能,你可以在互联网的例子不胜枚举找到。作为例子,请看这里:Split function equivalent in T-SQL?