クエリの内容に従って、このクエリの結果を並べ替えたい:
ここにあります :
SELECT a from Frais a where a.libelle = 'FRET' or a.libelle = 'Douane' or a.libelle = 'Transitaire'
FRET
最初とDouane
その後などのレコードが欲しい
order by libelle
アルファベット順のascまたはdescに従って並べ替えても問題は解決しません
クエリの内容に従って、このクエリの結果を並べ替えたい:
ここにあります :
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
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
明示的な順序付けを持つ「一時」テーブルに値を配置することによっても、これを行うことができます。
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