Dit zou je er de meeste controle over moeten geven:
order by
case left(positions.colleague_position_id, 1)
when 'A' then 1
when 'F' then 2
when 'T' then 3
when 'S' then 4
when 'C' then 5
else 6
end, positions.colleague_position_id
Dit komt omdat u alle niet-overeenkomende waarden naar de gewenste positie kunt sturen (in dit geval aan het einde). Het field() functie retourneert 0 voor niet-overeenkomende waarden en plaatst ze bovenaan de resultatenset, zelfs vóór de waarden die beginnen met A .
Daarnaast kunt u ook bestellen via positions.colleague_position_id zoals ik deed in het voorbeeld, zodat voor veel positions.colleague_position_id die met dezelfde letter beginnen, staan ze nog steeds op volgorde.