2
我有一个包含为客户采取的消息的表,我基本上需要找到最常用词的前50列表。按空格分隔的数值组并计数它们
该表被称为Messages
,键入的消息是Message
。实际上我想要SELECT
所有行,递归地将每个Message
按空格分割得到所有字,GROUP BY
每个字和COUNT
它们。我正在努力按照空间递归地分裂 - 任何想法?
我有一个包含为客户采取的消息的表,我基本上需要找到最常用词的前50列表。按空格分隔的数值组并计数它们
该表被称为Messages
,键入的消息是Message
。实际上我想要SELECT
所有行,递归地将每个Message
按空格分割得到所有字,GROUP BY
每个字和COUNT
它们。我正在努力按照空间递归地分裂 - 任何想法?
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
结果:
注意:你需要分割功能,你可以在互联网的例子不胜枚举找到。作为例子,请看这里:Split function equivalent in T-SQL?
您不要递归地分割......分割是线性的。 –
只有您有一个recusive功能来分割它时,分割才是线性的。所以你确实需要recusive。 –