2017-08-17 8 views
0

MSAccess 2007 SQLSQL結果を並べ替える方法は?

テーブルの列に値のユーザー検索ドロップダウンを作成しています。

フィールドに「xyz」と入力すると、検索列が始まるすべての行を検索するか、「xyz」が含まれています。しかし、私は列が 'xyz'で始まる行を最初にソートし、その後にその列に 'xyz'が含まれる行を追加します。ワイルドカードでLIKE句を使用して必要な行を見つける方法を知っていますが、質問は以下の順序で返された結果セットを取得する方法です。

は例えば、私の検索の欄には、含まれている場合:

  • xyzmon
  • 2xyz
  • zxyz
abcxyzruf xyzabc
  • MNO
  • ABCXYZ
  • zxyz
  • abcxyzruf
  • ABCXYZ

    • xyzabc
    • xyzmon
    • 2xyz
    • :私は、クエリが列をこの順に 'XYZ' を含むすべての行を返すようにしたい

    最高のものは何ですか?これは、MSaccess 2007でSQLを使用する場合にのみ有効です。

    order by instr(col, "xyz") 
    

    注:あなたがinstr()を使用することができます

  • +0

    並べ替えのロジックは何ですか? –

    +0

    David - 検索文字列で始まるものは、アルファベット順にASCでソートされ、検索文字列を含むものはstart-withでアルファベット順にソートされます。 – user2184214

    答えて

    3

    これは、すべての文字列がそれらに"xyz"を持っていることを前提としています。そうでない場合、不一致が最初に(非直感的に)起こります。ただし、サンプルデータの場合、すべての値は"xyz"です。

    EDIT:あなたの改訂版について

    order by iif(col like "xyz*", 1, 2), col 
    
    +0

    Thx Gordon。はい、すべてのレコードに「xyz」が含まれます。しかし、素晴らしいアイデアは、 'xyz'で始まらないものはアルファベット順ではなく 'xyz'がどこにあるのかに基づいてソートされるようになりました。これは、 'zxyz'が 'aaaxyz'の前に来ることを意味します。アルファベット順に並べ替えるには、結果が含まれている行を、「xyz」で始まる行の後に並べる必要があります。 – user2184214

    0

    ゴードンの答えは右のトラックに私を得ました。

    Order By iif(instr(col, 'xyz')=1, instr(col, 'xyz'), col), col 
    

    それはそれです!ゴードンに感謝します。 Order Byの2番目のcolは、starting-withサブグループもアルファベット順にソートします。

    関連する問題