需要帮助复杂的数据排序SQL Server

时间:2012-07-27 07:19:06

标签: sql sql-server

我需要帮助从数据库中复杂的数据排序。假设我的数据存储在表中,如下所示:

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。

2 个答案:

答案 0 :(得分:1)

  1. 编写一个函数将字符串标记为单词表。例如:How do I split a string so I can access item x?
  2. 将此功能应用于搜索字符串和描述表
  3. 用交叉申请加入两个结果;对结果进行分组,计数和排序。

答案 1 :(得分: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