Отфильтруйте данные по ключевым словам и отметьте, где они были найдены - PullRequest
0 голосов
/ 04 марта 2020

поэтому у меня есть запрос на данный момент.

SELECT *
FROM TABLE1

Это дает помимо прочего 4 столбца, которые содержат текст "Textbox1" "Textbox2" "Textbox3" "Textbox4".

Теперь я хочу отфильтровать этот запрос по ключевым словам в этом тексте коробки. Обычно пользователь может вводить от 0 до 5 ключевых слов, и строки из TABLE1 должны отображаться только в том случае, если в одном из текстовых полей найдено хотя бы одно ключевое слово. Также следует добавить новый столбец, в котором для каждого ключевого слова, найденного в текстовом поле, следует указать, какое ключевое слово и в каких текстовых полях было найдено.

Сам запрос будет позже выполняться в SSRS, где пользователь вводит ключевые слова. Таким образом, ключевые слова подпадают под Varchars. Для запроса вы можете использовать это:

DECLARE @Keyword1 AS VARCHAR(100) = '';
DECLARE @Keyword2 AS VARCHAR(100) = '';
DECLARE @Keyword3 AS VARCHAR(100) = '';
DECLARE @Keyword4 AS VARCHAR(100) = '';
DECLARE @Keyword5 AS VARCHAR(100) = '';

Спасибо за любую помощь.

Редактировать:

Example with desired result

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Это очень нелегкое решение, и оно не совсем то, что вы хотели, но, надеюсь, достаточно близко.

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

DECLARE @t TABLE (T1 varchar(100), T2 varchar(100), T3 varchar(100), T4 varchar(100))

INSERT INTO @t VALUES
(1, 11, 203, 30),
(8898, 54452, 1222, 12122)

DECLARE @k1 varchar(100) = '1'
DECLARE @k2 varchar(100) = '22'

SET @k1 = '%' + @k1 + '%'
SET @k2 = '%' + @k2 + '%'

SELECT 
    *
    , CASE WHEN T1 like @k1 THEN '1:T1 ' ELSE '' END +
      CASE WHEN T2 like @k1 THEN '1:T2 ' ELSE '' END +
      CASE WHEN T3 like @k1 THEN '1:T3 ' ELSE '' END +
      CASE WHEN T4 like @k1 THEN '1:T4 ' ELSE '' END +

      CASE WHEN T1 like @k2 THEN '2:T1 ' ELSE '' END +
      CASE WHEN T2 like @k2 THEN '2:T2 ' ELSE '' END +
      CASE WHEN T3 like @k2 THEN '2:T3 ' ELSE '' END +
      CASE WHEN T4 like @k2 THEN '2:T4 ' ELSE '' END 
      As Found
    FROM @t

Это дает следующие результаты. enter image description here

0 голосов
/ 06 марта 2020

С помощью Алана Шофилда я нашел нужное мне решение.

SELECT * from( Select*,
 CASE WHEN Textbox1 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END  
      As Textbox1found,


      CASE WHEN Textbox2 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END   
      As Textbox2found,

      CASE WHEN Textbox3 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END
      As Textbox3found,

      CASE WHEN Textbox4 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END
      AS Textbox4found

      FROM Table1)as Result
      WHERE Result.Textbox1found <> '' OR Result.Textbox2found <> '' OR Result.Textbox3found <> '' OR Result.Textbox4found <> '' or (@Keyword1='' AND @Keyword2='' AND @Keyword3='' AND @Keyword4='' AND @Keyword5='')

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

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