2017-08-17 60 views
0

MSAccess 2007 SQL如何對SQL結果進行無序排序?

我正在爲表列中的值編寫用戶搜索下拉菜單。

如果用戶在字段中鍵入'xyz',我想查找搜索列開頭的所有行,或者包含'xyz'。但我想要那些列以'xyz'開頭的行首先排序,然後是那些列中包含'xyz'的行。我知道如何使用帶有通配符的LIKE子句來查找所需的行,問題是如何獲取以下順序返回的結果集。

例如,如果我的搜索欄包含:

  • abcxyz
  • MNO
  • XYZABC
  • xyzmon
  • 2xyz
  • abcxyzruf
  • zxyz

我想查詢返回這裏列包含順序 'XYZ' 的所有行:

  • XYZABC
  • xyzmon
  • 2xyz
  • abcxyz
  • abcxyzruf
  • zxyz

什麼是最好的,最e僅在MSaccess 2007中使用SQL進行此操作的唯一方法是什麼?

+0

排序的邏輯是什麼? –

+0

大衛 - 那些以搜索字符串開始的字符串首先按照字母順序排序的ASC,並且那些包含搜索字符串的字符串會在那些以字母開頭的字符串之後出現,並且這些字符串也將按字母順序排序。 – user2184214

回答

3

您可以使用instr()

order by instr(col, "xyz") 

注:這是假設所有字符串中都有"xyz"。如果不是,那麼非匹配將(不直覺地)首先出現。但是,對於您的示例數據,所有值都有"xyz"

編輯:

爲了您的修訂版:

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的第二列強制開始 - 子組也按字母順序排序。

相關問題