Chaque expression est évaluée comme un booléen et traitée comme 0 pour faux et 1 pour vrai et triée de manière appropriée. Même si cela fonctionne, la logique est difficile à suivre (et donc à maintenir). Ce que j'utilise est une fonction qui trouve l'index d'une valeur dans un tableau.
ORDER BY idx(array['Nails','Bolts','Washers','Screws','Staples','Nuts'], s.type)
C'est beaucoup plus facile à suivre. Les clous seront triés en premier et les noix en dernier. Vous pouvez voir comment créer la fonction idx dans le référentiel d'extraits Postgres.http://wiki.postgresql.org/wiki/Array_Index