1

我需要从数据库中进行复杂数据排序的帮助。假设我的数据存储在这样的表中:

Description
--------------
JCB Excavator - ECU P/N: 728/35700
Geo Prism 1995 GEO - ABS #16213899 GEO pump
Geo Prism 1995 - GEO ABS #16213897
Geo Prism 1995 - ABS #16213897
Ersatz Airbags, Gurtstrammer und Auto Körper  Teile
this test JCB pipe & JCB pump
Wie man BBA reman erreicht

有7行。我想以这样的方式编写一个 SQL 查询,结果它将根据我的输入词对数据进行排序。假设我的搜索词是GEO,JCB用逗号分隔的两个单词。首先出现的行是搜索词找到最大时间的那些行。所以对于GEO这个词在大多数行中都有最长的时间。

将需要两种类型:

  • 首先以搜索词找到最大时间的方式对数据进行排序。
  • 根据在每行中找到的搜索词的最大出现次数对数据进行第二次排序。

假设GEO在最大行中找到搜索词。

所以所有有GEO关键字的行都会先出现,然后JCB相关数据才会出现。

在相关数据中,那些具有最大关键字GEO的行将首先出现。GEO

所以输出看起来像。

Description
--------------
Geo Prism 1995 GEO - ABS #16213899 GEO pump
Geo Prism 1995 - GEO ABS #16213897
Geo Prism 1995 - ABS #16213897
this test JCB pipe & JCB pump
JCB Excavator - ECU P/N: 728/35700
Ersatz Airbags, Gurtstrammer und Auto Körper  Teile
Wie man BBA reman erreicht

请帮助我构建这种适用于所有 SQL Server 版本的 sql。

4

2 回答 2

1
  1. 编写一个函数将字符串标记为单词表。例如:如何拆分字符串以便访问项目 x?
  2. 将此函数应用于搜索字符串和描述表
  3. 用 cross apply 连接两个结果;对结果进行分组、计数和排序。
于 2012-07-27T08:14:55.437 回答
0

干得好

declare @t table(Description varchar(1000))
insert into @t
select 'JCB Excavator - ECU P/N: 728/35700 ' union all
select 'Geo Prism 1995 GEO - ABS #16213899 GEO pump ' union all
select 'Geo Prism 1995 - GEO ABS #16213897 ' union all
select 'Geo Prism 1995 - ABS #16213897 ' union all
select 'Ersatz Airbags, Gurtstrammer und Auto Körper  Teile ' union all
select 'this test JCB pipe & JCB pump ' union all
select 'Wie man BBA reman erreicht'

declare @search_term varchar(100)
set @search_term ='GEO'
select Description from @t
order by len(Description)-len(replace(Description,@search_term,'')) desc

结果

Description
----------------------------------------------------------
Geo Prism 1995 GEO - ABS #16213899 GEO pump 
Geo Prism 1995 - GEO ABS #16213897 
Geo Prism 1995 - ABS #16213897 
Ersatz Airbags, Gurtstrammer und Auto Körper  Teile 
this test JCB pipe & JCB pump 
Wie man BBA reman erreicht
JCB Excavator - ECU P/N: 728/35700 
于 2012-07-27T08:23:15.153 回答