按查询的where子句中的字段顺序对sql查询的结果进行排序

Posted

技术标签:

【中文标题】按查询的where子句中的字段顺序对sql查询的结果进行排序【英文标题】:sort result of sql query by order of field in where clause of query 【发布时间】:2013-05-07 17:50:13 【问题描述】:

我想根据查询的包含对该查询的结果进行排序:

在这里:

SELECT a from Frais a where a.libelle = 'FRET' or a.libelle = 'Douane' or a.libelle = 'Transitaire'

我想要先有FRET 和之后有Douane 的记录,依此类推

order by libelle 

没有解决问题,它按照字母顺序 asc 或 desc 对它们进行排序

【问题讨论】:

【参考方案1】:

一种选择是使用CASE 语句:

SELECT * 
FROM Frais a 
WHERE a.libelle = 'FRET' 
   OR a.libelle = 'Douane' 
   OR a.libelle = 'Transitaire'
ORDER BY 
   CASE 
     WHEN a.libelle = 'FRET' THEN 1
     WHEN a.libelle = 'Douane' THEN 2
     WHEN a.libelle = 'Transitaire' THEN 3
   END

【讨论】:

【参考方案2】:
SELECT a from Frais a where a.libelle = 'FRET' or a.libelle = 'Douane' or a.libelle = 'Transitaire'
order by case a.libelle when 'FRET' then 0 when 'Douane' then 1 when 'Transitaire' then 2 end

【讨论】:

【参考方案3】:

您也可以通过将值放在具有明确排序的“临时”表中来做到这一点:

select f.*
from frais f join
     (select 'FRET' as val, 1 as ord union all
      select 'Douane', 2 union all
      select 'Transitaire', 3
     ) vals
     on f.libelle = vals.val
order by vals.ord

【讨论】:

以上是关于按查询的where子句中的字段顺序对sql查询的结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章

16-查询语句的执行顺序

mysql中的五子查询

按 SQL IN() 子句中的值顺序排序

SQL查询语句执行顺序

在SELECT语句中,对查询结果进行排序的子句是啥?能消除重复行的关键字是啥?

使用 WHERE 子句中的过滤器优化 OUTER JOIN 查询。(查询规划器)