【发布时间】:2014-12-28 20:05:54
【问题描述】:
我希望能够:
- 从 Table1 中的 column1 中提取特定单词 - 但仅从名为 wordTable2 中匹配的单词/em>,
- 对已找到的单词数进行(n 个)计数,然后
- 将此信息放入具有如下格式的永久表中:
决赛
Word | Count
--------+------
Test | 7
Blue | 5
Have | 2
目前我已经尝试过:
INSERT INTO final (word, count)
SELECT
extext
, SUM(dbo.WordRepeatedNumTimes(extext, 'test')) AS Count
FROM [dbo].[TestSite_Info], [dbo].[table_words]
WHERE [dbo].[TestSite_Info].ExText = [dbo].[table_words].Words
GROUP BY ExText;
函数dbo.WordRepeatedNumTimes是:
ALTER function [dbo].[WordRepeatedNumTimes]
(@SourceString varchar(8000),@TargetWord varchar(8000))
RETURNS int
AS
BEGIN
DECLARE @NumTimesRepeated int
,@CurrentStringPosition int
,@LengthOfString int
,@PatternStartsAtPosition int
,@LengthOfTargetWord int
,@NewSourceString varchar(8000)
SET @LengthOfTargetWord = len(@TargetWord)
SET @LengthOfString = len(@SourceString)
SET @NumTimesRepeated = 0
SET @CurrentStringPosition = 0
SET @PatternStartsAtPosition = 0
SET @NewSourceString = @SourceString
WHILE len(@NewSourceString) >= @LengthOfTargetWord
BEGIN
SET @PatternStartsAtPosition = CHARINDEX (@TargetWord,@NewSourceString)
IF @PatternStartsAtPosition <> 0
BEGIN
SET @NumTimesRepeated = @NumTimesRepeated + 1
SET @CurrentStringPosition = @CurrentStringPosition + @PatternStartsAtPosition +
@LengthOfTargetWord
SET @NewSourceString = substring(@NewSourceString, @PatternStartsAtPosition +
@LengthOfTargetWord, @LengthOfString)
END
ELSE
BEGIN
SET @NewSourceString = ''
END
END
RETURN @NumTimesRepeated
END
当我运行上面的INSERT 语句时,没有插入任何记录。
在表 TestSite_Info 中有一个名为 Extext 的列。在此列中,有随机文本 - 其中一个词是“测试”。
在另一个名为 Table_Words 的表中,我有一个名为 Words 的列,其中一个词是“测试”。所以理论上,由于单词是匹配的,我会把它捡起来,放到表Final中,然后在单词旁边(在另一列中)计数该单词的次数已在 TestSite_Info.Extext 中找到。
Table_Words
id|word
--+----
1 |Test
2 |Onsite
3 |Here
4 |As
TestSite_Info
ExText
-------------------------------------------------
This is a test, onsite test , test test i am here
预期的决赛表已在顶部给出。
-- 更新
现在我已经运行了 Abecee 代码块,这实际上可以恢复计数列和与单词相关的 id。
结果如下:
id|total
--+----
169 |3
170 |0
171 |5
172 |7
173 |1
174 |3
取自以下文本,它是从中提取的:
测试测试,我去了,这是一个测试,我正在写垃圾你好 但我不在乎关心和关心似乎是你会看到出现的词 四次以及单词单词单词单词单词,但是一个.! 谁知道这里发生了什么。
如您所见,ID 172 的计数出现了 7 次(作为参考,请参阅下面的 ID 号与单词相关的内容)这是不正确的,它应该出现 6 次(它为某些原因)以及 ID 171,即 care 一词,出现 4 次,但计数显示为 5 次。任何想法为什么会这样? 此外,我真正追求的是一种方式,因为您已经非常友好地完成了显示 ID 和计数的表格,但也在决赛桌中显示了与之相关的单词,所以我不必通过 ID 链接回来表以查看实际单词是什么。
Word|id
--+----
as |174
here |173
word |172
care |171
hello |170
test |169
【问题讨论】:
-
到目前为止你尝试过什么?请考虑提供SQL Fiddle 与测试数据和您的 SQL 语句,它不能完全提供预期的结果。
-
使用示例数据和所需结果编辑您的问题。
-
您使用的是哪个版本的 SQL Server? - 是的:引用的文章实际上可能是相关的。对不起。
-
感谢 Abecee 的帮助。我实际上有两个实例。如果我们可以让它在 SQL 2008 R2 上运行那就太好了,SQL Serv 2012 Standard 也是如此。
-
嗨,Abecee,绝对辉煌,它就在附近。我已经运行了您的以下声明,但仍有一些事情没有加起来。我现在将更新的信息放入问题字段
标签: sql sql-server tsql count