-1

こんにちは、下の私の表を見てください

Name
----------
Banaskantha - 66-DV
Banaskantha - 66-MM
Banaskantha-Dv
Banaskantha-MM
Bharuch - 77-RP
Bharuch-RP
hg-SR

しかし、私はこのテーブルを以下の順序で欲しい

Name
-------------
Banaskantha-Dv
Banaskantha-MM
Banaskantha - 66-DV
Banaskantha - 66-MM
Bharuch-RP
Bharuch - 77-RP
hg-SR

どうやってやるの ?

4

1 に答える 1

0

次のSQLステートメントを試してください。

 SELECT name, 
       case isnumeric(SUBSTRING(name, LEN(name)-4,2))
     when 1 then
             left(name, len(name)-8) + 'z' + RIGHT(name, 2) + '-' + SUBSTRING(name, LEN(name)-4,2)
         else name 
   end as sortby
FROM [your table name]
order by sortby

クエリは、並べ替えの目的でフィールドを追加します。そのフィールドの値は、名前フィールドに数値が含まれているかどうかによって異なります。はいの場合、それをperfix(つまり、'Banaskantha')+'z'(つまり、接尾辞のない接頭辞のインスタンスの下になります)、接尾辞(つまり、'DV')+数値に変換します。数値がない場合は、元の値を保持します。

私はいくつかの仮定をしました:

  1. 数値は常に末尾から5文字から始まります
  2. フィールド値に数値がある場合、接頭辞(つまり、Banaskantha)と「-」の間および「-」と数値の間には常にスペースがあります。
  3. フィールド値に数値が含まれていない場合、接頭辞と接尾辞の間にスペースはありません。

仮定の1つが正しくない場合は、それに応じてSQLステートメントを書き直してください。

フィールド値に一貫性がないために問題が発生したとしましょう。このような場合、並べ替えの目的でテーブルにフィールドを作成し、挿入トリガーと更新トリガーに基づいてフィールドに入力することをお勧めします。

于 2012-09-22T08:16:22.930 に答える