根据满足条件的顺序排序?

Ita*_*rom 2 sql ms-access sql-order-by

我有一个非常简单的问题:是否可以根据满足的条件对检索的行进行排序?例如,我有一个人的表,我想要检索所有名字以"I"开头,或者以"ster"结尾,或者包含"lo"的人,根据满足这些条件的顺序排序.首先是与第一个条件匹配的行,然后是与第二个条件匹配的行,依此类推.(没有重复:如果一行符合第一个条件,则不应再次显示第二个条件)

编辑: 我使用Visual C#,我使用MS Access管理数据库.(文件格式为.mdb,如果重要的话)

谢谢=)

Tim*_*ner 7

一般来说,你可以在你的案件中加上一个案例陈述order by.

这可以在SQL Server中使用,例如:

order by (case when myCol like 'I%' then 1 when myCol like '%ster' then 2 when myCol like '%lo%' then 3 end)
Run Code Online (Sandbox Code Playgroud)

您使用的是哪个DBMS?

UPDATE

对于MS-ACCESS,您可以使用IIF此答案中显示的语句:

MS-访问复杂的顺序,由

基于此,您可能需要以下内容:

SELECT *
FROM people
WHERE [name] Like "I*" Or [name] Like "*ster" Or [name] Like "*lo*"
ORDER BY IIf([name] Like "I*", 1, IIf([name] Like "*ster", 2, IIf([name] Like "*lo*", 3, 4)));
Run Code Online (Sandbox Code Playgroud)


Jor*_*ing 5

这样的事情应该起作用:

SELECT * FROM people
ORDER BY
  CASE WHEN name LIKE "I%" THEN 0
    WHEN name LIKE "%ster" THEN 1
    WHEN name LIKE "%lo%" THEN 2
    ELSE 3
  END ASC;
Run Code Online (Sandbox Code Playgroud)

在Access中,您可能必须诉诸嵌套IIF()s:

ORDER BY
  IIF( name LIKE "I%",     0,
  IIF( name LIKE "%ster%", 1,
  IIF( name LIKE "%lo%",   2,
    3
  ) ) ) ASC
Run Code Online (Sandbox Code Playgroud)