2014-12-18 2 views
1

Мне было предложено найти определенную строку и создать список, в котором поле описания содержит эту строку. Не проблема. В этом случае я использовал LIKE '% man%' и дал набор записей, содержащих «человек». Это также приводит к появлению «управления», «управления», «человечество» и т. Д. Я бы хотел найти набор записей, содержащий список найденных слов, которые включают «человек» и количество вхождений. Возможно ли это в SQL 2008? Если это так, вы можете указать мне в правильном направлении?Найдите количество слов, содержащих строку из таблицы SQL

+1

Как вы определяете "слово"? – NoChance

+0

Попробуйте добавить пример данных и ожидаемый результат –

+0

Вы хотите сказать, что хотите подсчитать каждое отдельное слово в списке или просто количество для каждого попадания в пределах одного описания. – KHeaney

ответ

0

Ваш вопрос довольно расплывчатый, и это совсем не ясно, что вы хотите для вывода. Посмотрите, если что-то подобное указывает вам в правильном направлении.

declare @ValueToFind varchar(20) = 'man' 

select * 
    , ABS((DATALENGTH(replace(SomeValue, @ValueToFind, ''))) - DATALENGTH(SomeValue))/DATALENGTH(@ValueToFind) 
from (Values('manage manager manman'), ('management'), ('mankind manfred'), ('none here')) v(SomeValue) 
0

Как насчет:

CREATE TABLE #temp 
(
[Description] varchar(250) 
) 

INSERT INTO #temp 
VALUES 
    ('a small step for mankind'), 
    ('my manager says'), 
    ('you might manage to purchase this'), 
    ('try to manage this'), 
    ('he was a small man'), 
    ('no woman no cry'), 
    ('no words can describe') 



; 
WITH CTE 
As 
(
    SELECT *, CHARINDEX('man',[Description]) startPos, CHARINDEX(' ', [Description], CHARINDEX('man',[Description])) endPos 
    FROM #temp 
    WHERE [Description] LIKE '%man%' 
), 
WordCTE 
AS 
(
    SELECT [Description], 
      CASE 
       WHEN endPos = 0 THEN SUBSTRING([Description], startpos, 100) 
       ELSE SUBSTRING([Description], startpos, endPos - startPos) 
      END AS [Word] 
    FROM CTE 
) 
SELECT [Word], COUNT(*) 
FROM WordCTE 
GROUP BY [Word] 
0

Я думаю, что вы хотели что-то вроде этого.

create table Words(text varchar(50)) 

insert into Words Values('man') 
insert into Words Values('management') 
insert into Words Values('man') 
insert into Words Values('management') 
insert into Words Values('mankind') 
insert into Words Values('manpower') 

select temptable.text, count(temptable.text) as 'count' 
from 
(select text 
from Words 
where text like '%man%') as temptable 
group by temptable.text 

http://www.sqlfiddle.com/#!3/a6cdc/1

Смежные вопросы