SQL Подсчет всех вхождений слов из таблицы - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь создать облако слов из таблицы опроса клиентов.Я хотел посчитать все вхождения слов из определенного столбца в таблице.Эта колонка содержит все комментарии опроса клиентов.Я пытался следовать приведенным ниже инструкциям, но не смог понять, как кодировать и считать все вхождения слов для всех комментариев клиентов.

http://sqljason.com/2012/03/making-tag-cloud-with-ssrs-rich-text.html

Извинения, несколько новые для SQL.

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Если вы работаете с SQL Server 2016 или более поздней версией, вам подойдет следующее:

SELECT 
        REPLACE(REPLACE(s.value, ',', ''), ' ', '') [Word]
      , COUNT(*) Occurrence

FROM  TableName t
           CROSS APPLY STRING_SPLIT( [Comments] , ' ') s

GROUP BY REPLACE(REPLACE(s.value, ',', ''), ' ', '')

Если вы работаете с более старой версией, более старой, чем SQL Server 2016, вынеобходимо использовать пользовательскую функцию [Split String], есть много примеров в Интернете, просто Google.Но вы можете использовать вышеупомянутый запрос с этой более старой версией пользовательской функции [Split String].

Также для отчета SSRS я буду заполнять таблицу этими данными так часто, как мне нужно, и указыватьсообщить в эту таблицу, но не рекомендую выполнять эту команду каждый раз при выполнении отчета.

0 голосов
/ 23 мая 2018

Я проверял это на MS SQL 2012 и 2014.

    --Create table
    DECLARE @t TABLE (RowNum int null, comments varchar(max))

    --Build table
    INSERT INTO @t
    (RowNum, comments)
    SELECT ROW_NUMBER() OVER(ORDER BY example.comment DESC) AS RowNum,
           REPLACE(REPLACE(example.comment, '!', ''), ',', '')  FROM
    (
    SELECT 'This website is awesome' AS comment UNION
    SELECT 'I like your website, however it could be better' UNION
    SELECT 'The menu button at the top is really nice!'
    )example

    --Show table
    SELECT * FROM @t

    --Setup vars
    DECLARE @i int = 1
    DECLARE @Count int = (SELECT COUNT(t.RowNum) FROM @t t)
    DECLARE @delimiter varchar(1) = ' '
    DECLARE @output TABLE(splitdata NVARCHAR(MAX))

    --Iterate through a table and build output table
    WHILE @i <= @Count
    BEGIN
        --Do something on one row at a time ie: WHERE(RowNum = @i)
        DECLARE @string varchar(max) = (SELECT t.comments FROM @t t WHERE(t.RowNum = @i))

        DECLARE @start int
        DECLARE @end int 
        SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
        WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
          SET @end = LEN(@string) + 1
          INSERT INTO @output (splitdata)  
          VALUES(SUBSTRING(@string, @start, @end - @start)) 
          SET @start = @end + 1 
          SET @end = CHARINDEX(@delimiter, @string, @start)
        END 
        SET @i = @i + 1 --Iterate i
    END

    --Show output table
    SELECT * FROM @output

    --Summarize words
    SELECT o.splitdata, COUNT(*) AS Cnt FROM @output o
    GROUP BY o.splitdata
    ORDER BY Cnt DESC
0 голосов
/ 23 мая 2018

Самый простой способ: где Countwords = Столбец для проверки, а WET - слово, на которое вы рассчитываете.

Select SUM(CTS) 'TotalOccurancesOfWord'
from
( 
SELECT LEN(countwords) - LEN(REPLACE(countwords, 'wet', '')) CTS
from #temp --table you are using
) a

также смотрите: Как подсчитать количество символов в столбце SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...