2009-09-10 2 views
0

У меня есть следующий код для поиска нескольких ключевых слов в заголовке документа, который отлично работает. Теперь я хочу иметь столбец, который показывает количество ключевых слов, которые находятся в каждой строке заголовка и упорядочивается по-своему. Например, если я ищу "Декретный отпуск" я должен получить что-то вроде этого:Сортировка таблицы по количеству найденных ключевых слов

Имени - Ключевые слов найдены

Maternity Leave политики - 2

Годовой политика отпуска - 1

Пособие по беременности и родам для будущих матерей - 1

Надеюсь, что это имеет смысл, Большое спасибо!

Dim s As String = TextBox1.Text 

    Dim SqlQuery As String = "SELECT Doc_LibraryTable.DocID, Doc_LibraryTable.DocName, Doc_LibraryTable.DocType WHERE Doc_LibraryTable.DocType = DocType" 

    Dim ints As String() = s.Split(" ") 
    Dim i As Integer 

    If UBound(ints) >= 1 Then 
     SqlQuery += " AND (Doc_LibraryTable.DocName LIKE '%" + ints(0) + "%'"  

     For i = 1 To UBound(ints) 
      If Not ints(i) = "of" And Not ints(i) = "the" And Not ints(i) = "in" And Not ints(i) = "or" Then 
       SqlQuery += " OR Doc_LibraryTable.DocName LIKE '%" 
       SqlQuery += ints(i) + "%'" 
      End If 
     Next 



    ElseIf UBound(ints) < 1 Then 
     For i = 0 To UBound(ints) 
      SqlQuery += " AND (Doc_LibraryTable.DocName LIKE '%" 
      SqlQuery += ints(i) + "%" 
     Next 

    End If 

    If UBound(ints) >= 1 Then 
     SqlQuery += ")" 
    ElseIf UBound(ints) < 1 Then 
     SqlQuery += "')" 
    End If 

    SqlDataSource2.SelectCommand = SqlQuery 
    GridView1.DataSource = SqlDataSource2 

ответ

0

Вы можете сделать это мой модифицируя ВЫБЕРИТЕ положение в цикле и с помощью оператора CASE, например:

Dim SqlQuery As String = "SELECT Doc_LibraryTable.DocID, Doc_LibraryTable.DocName, Doc_LibraryTable.DocType, " 
Dim sep as String = "" 
For i = 0 To UBound(ints) 
    SqlQuery += sep + "CASE WHEN Doc_LibraryTable.DocName LIKE '%" + ints(i) + "%' THEN 1 ELSE 0 END" 
    sep = " + " 
Next 
SqlQuery += " as MatchCount WHERE Doc_LibraryTable.DocType = DocType" 
+0

Это то, что я искал. Работает отлично, большое спасибо !!!! – 2009-09-10 16:33:20

0

Другой способ, который немного грязный, чтобы сделать что-то вроде

select ... 
, len(replace([DocName],'Maternity leave','Maternity leave' + '*')) - len([DocName]) 
    As NameHits 

Я использовал следующий код, чтобы проверить это: -

set nocount on; 
declare @t as table([name] varchar(10)) 
insert into @t values ('a bb c') 
insert into @t values ('aa bc c') 

declare @find varchar(5) 
set @find = 'bc' 

select 
    *, 
    len(replace([name],@find,@find + '*')) - len(name) 

from @t 
+0

На самом деле это только найдет выражение «отпуск по беременности и родам» и, возможно, не подходит! – Rippo

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