SQL统计文档关键字的出现次数

SQL统计文档关键字的出现次数,sql,sql-server-2008,loops,count,keyword,Sql,Sql Server 2008,Loops,Count,Keyword,我正试图找到一种最有效的方法,根据传递到存储过程中的特定文档ID列表,计算关键字在文档表中出现的次数 SP将参数@DocIds作为逗号分隔的列表,例如10020102340 我想做的是选择DocID存在于我要传递的逗号分隔列表中的记录,并将关键字记录到临时表中,但如果关键字已添加到我的临时表中,则还要保留一个计数 例如,文档表: DocID | Keywords ----------------------------- 100 | Test, Document, Info 2010 |

我正试图找到一种最有效的方法,根据传递到存储过程中的特定文档ID列表,计算关键字在文档表中出现的次数

SP将参数@DocIds作为逗号分隔的列表,例如10020102340

我想做的是选择DocID存在于我要传递的逗号分隔列表中的记录,并将关键字记录到临时表中,但如果关键字已添加到我的临时表中,则还要保留一个计数

例如,文档表:

DocID | Keywords
-----------------------------
100   | Test, Document, Info
2010  | Document, users
4     | ....    
2340  | users, client  
临时表将返回:

Keyword  | Count
Test     | 1
Document | 2
Info     | 1  
users    | 2
client   | 1
我相信一些SQL专家对此有一个很好的解决方案,任何帮助都将不胜感激

非常感谢
M

我认为您必须为每个关键字运行一个查询

INSERT INTO tmp VALUES ('users',(
   SELECT COUNT(DocID) FROM Documents WHERE keywords LIKE '%users%')
)
,具有从关键字列表中进行选择的技术。 使用这种技术和关键字分组,您可以获得计数*
这正是您想要的。

这里有一个针对SQL Server 2005+的解决方案。它使用递归CTE生成字数

示例数据和临时表创建

CREATE Table #Temp ([Count] int, Keyword varchar(max) );

DECLARE @document AS TABLE ( 
  docid    INT, 
  keywords VARCHAR(MAX)) 

INSERT INTO @document 
VALUES      (100, 'Test, Document, Info'), 
            (2010, 'Document, users'), 
            (4, '....'), 
            (2340, 'users, client')
质疑

输出

Count       Keyword
--------    -----
1           ....
1           client
2           Document
1           Info
1           Test
2           users

假设您使用的是SQL Server,请查看将字符串拆分为单独行的众多答案之一,例如

那么你的步骤是: 1.使用此功能将相关文档ID列表解析为临时表@selectedDocs,可能需要进行数据类型转换 2.用这些文档使用的关键字填充另一个临时表@keywords: 插入@keywords docID,关键字 选择d.docID,ltrimrtrimwords.s 从@selectedDocs sd d.docID=sd.docID上文档d的内部联接 交叉应用select*from dbo.Split',',d.words关键字 3.计算每个关键字的使用次数: 选择k.keyword,countk.docID 来自@k关键字 按k关键字分组


请注意,您通常只在需要一些答案的地方使用表变量,或者在需要更多答案的地方使用临时表变量

您应该包括数据库和版本,因为解析逗号分隔字段的解决方案高度依赖于此。很好的调用-我使用的是SQL Server 2008感谢您的输入dude-我应该如上所述提到我使用的是SQL Server 2008
Count       Keyword
--------    -----
1           ....
1           client
2           Document
1           Info
1           Test
2           users