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コンマで区切られた 2 つの単語であるとします。最初に来る行は、検索ワードが最大時間見つかった行です。そのためGEO、ほとんどの行で単語の時間が最大になります。

次の 2 種類が必要です。

  • 最初に、検索語が最大時間を見つけた方法でデータを並べ替えます。
  • 次に、各行で見つかった検索用語の最大出現数に基づいてデータを並べ替えます。

検索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. クロス適用で 2 つの結果を結合します。結果をグループ化し、カウントして並べ替えます。
于 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 に答える