SQL server sort包含结果

时间:2015-07-24 08:28:18

标签: sql-server tsql

我想在SQL Server中编写一个查询,搜索某些列中的某些单词,并使用匹配单词的数量对结果进行排序。例如,在打击中,结果的顺序必须是:Row2,Row3,Row1。

搜索字符串:w1 w2 w3

第1行:第1列 = w1 w4 第2列 = w5 w6 ==> 匹配单词w1
第2行:第1列 = w1 w2 第2列 = w3 w4 ==> 匹配单词: w1 w2 w3
第3行:第1列 = w1 w2 第2列 = w5 w6 ==> 匹配单词: w1 w2
第4行:第1列 = w5 w6 第2列 = w7 w8 w9

我的代码:select * from Table1 where contains((col1,col2),@search))

2 个答案:

答案 0 :(得分:0)

查看CONTAINSTABLE语句,它可以帮助您通过匹配排名来对结果进行排序。

create table Table1 (id int primary key identity(1,1), col1 varchar(100), col2 varchar(100));
GO
create fulltext catalog Test AS DEFAULT;
GO
create fulltext index on Table1(col1, col2) 
key index PK__Table1__3213E83FFB568640 ON Test; 
GO

insert into Table1 (col1, col2)
values
   ('w1 w4','w5 w6')
  ,('w1 w2','w3 w4')
  ,('w1 w2','w5 w6')
  ,('w5 w6','w7 w8 w9')

declare @search varchar(100) = 'w1 or w2 or w3';

select * from Table1 T
join CONTAINSTABLE(Table1, (col1,col2), @search) AS M ON T.ID = M.[KEY]
order by M.[RANK] DESC; 

答案 1 :(得分:0)

实现目标的简便方法:

;WITH 

words_to_search as (
   select 'w1' w union all   
   select 'w2' w union all   
   select 'w2' w ), 

searching as (
   select Id 
   from your_table t 
   inner join words_to_search w 
     on t.column1 + t.column2 like '%' + w.w + '%' ),

ranking_it as (
   select Id, count(*) as n
   from searching
   group by Id )

select * 
  from ranking_it r -- joining your table if you need
 order by r.n;

小心表现,对于concat和操作会很糟糕。