如何排序SQL结果?

时间:2017-08-17 17:52:18

标签: sql ms-access-2007

MSAccess 2007 SQL

我正在为表格列中的值编写用户搜索下拉列表。

如果用户键入' xyz'在该字段中,我想查找搜索列所在的所有行 - 或包含' xyz'。但是我想要那些列以' xyz'开头的行。首先排序,然后是那些列包含' xyz'的行。我知道如何使用带有通配符的LIKE子句来查找所需的行,问题是如何获得按以下顺序返回的结果集。

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

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

我希望查询返回列包含' xyz'的所有行。按此顺序:

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

在MSaccess 2007中使用SQL实现这一目标的最佳,最有效,唯一的方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用instr()

order by instr(col, "xyz")

注意:这假定所有字符串中都包含"xyz"。如果不是,那么不匹配将(非直观地)首先出现。但是,对于您的示例数据,所有值都有"xyz"

编辑:

对于您的修订版本:

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

答案 1 :(得分:0)

戈登的回答让我走上正轨。

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

就是这样!!!非常感谢戈登。 Order By的第二个col强制start-with子组也按字母顺序排序。