Order by (o order)

La instrucció order ordena una taula de nid, de rid o d'objectes JSON i retorna la mateixa taula ordenada. La paraula clau by pot seguir opcionalment order.

Exemple:

(select Customer order 'First name').'first name'

Ordenar textos

L'ordenació de textos es fa segons el codi ASCII. Les majúscules i les minúscules tenen valors diferents, igual que els caràcters accentuats.
Per a una ordenació alfabètica, val més fer servir la funció upper() per convertir el text a majúscules abans d'ordenar:

(select Customer order upper('First name')).text('first name')

Nota: la funció upper() no elimina els accents; només converteix els caràcters a majúscules. Per tant, aquest enfocament només funciona parcialment per a l'ordenació alfabètica.
Per tractar els accents del tot, us cal una funció pròpia que els elimini:

Funció d'eliminació d'accents:

function SansAccent(S : text) do
  S := replacex(S, "Ç|Ć", "g", "C");
  S := replacex(S, "ç", "g", "c");
  S := replacex(S, "è|é|ê|ë", "g", "e");
  S := replacex(S, "È|É|Ê|Ë", "g", "E");
  S := replacex(S, "à|á|â|ã|ä|å", "g", "a");
  S := replacex(S, "@|À|Á|Â|Ã|Ä|Å", "g", "A");
  S := replacex(S, "ì|í|î|ï", "g", "i");
  S := replacex(S, "Ì|Í|Î|Ï", "g", "I");
  S := replacex(S, "ð|ò|ó|ô|õ|ö", "g", "o");
  S := replacex(S, "Ò|Ó|Ô|Õ|Ö", "g", "O");
  S := replacex(S, "ù|ú|û|ü", "g", "u");
  S := replacex(S, "Ù|Ú|Û|Ü", "g", "U");
  S := replacex(S, "ý|ÿ", "g", "y");
  S := replacex(S, "Ý", "g", "Y");
  S
end;

(select Customer order SansAccent(upper('First name'))).text('first name')

Ordenació ascendent i descendent

L'ordre d'ordenació per defecte és ascendent (de més petit a més gran).
Per ordenar de manera descendent, l'enfocament depèn del tipus de valor:

Per a valors numèrics:

Podeu fer servir el signe menys (-):

(select Invoice order -'Invoice Date').text('Invoice Date')

Per a textos:

No hi ha cap funció integrada per invertir un text. Us n'heu de crear una. A continuació teniu un exemple que tracta els 256 caràcters ASCII, recorrent cada caràcter i invertint-ne el valor:

Funció d'inversió de text:

function reverseAscii(t : text) do
  var ascii := urlDecode("%C3%BF%C3%BE%C3%BD%C3%BC%C3%BB%C3%BA%C3%B9%C3%B8%C3%B7%C3%B6%C3%B5%C3%B4%C3%B3%C3%B2%C3%B1%C3%B0%C3%AF%C3%AE%C3%AD%C3%AC%C3%AB%C3%AA%C3%A9%C3%A8%C3%A7%C3%A6%C3%A5%C3%A4%C3%A3%C3%A2%C3%A1%C3%A0%C3%9F%C3%9E%C3%9D%C3%9C%C3%9B%C3%9A%C3%99%C3%98%C3%97%C3%96%C3%95%C3%94%C3%93%C3%92%C3%91%C3%90%C3%8F%C3%8E%C3%8D%C3%8C%C3%8B%C3%8A%C3%89%C3%88%C3%87%C3%86%C3%85%C3%84%C3%83%C3%82%C3%81%C3%80%C2%BF%C2%BE%C2%BD%C2%BC%C2%BB%C2%BA%C2%B9%C2%B8%C2%B7%C2%B6%C2%B5%C2%B4%C2%B3%C2%B2%C2%B1%C2%B0%C2%AF%C2%AE%C2%AD%C2%AC%C2%AB%C2%AA%C2%A9%C2%A8%C2%A7%C2%A6%C2%A5%C2%A4%C2%A3%C2%A2%C2%A1%C2%A0%C2%9F%C2%9E%C2%9D%C2%9C%C2%9B%C2%9A%C2%99%C2%98%C2%97%C2%96%C2%95%C2%94%C2%93%C2%92%C2%91%C2%90%C2%8F%C2%8E%C2%8D%C2%8C%C2%8B%C2%8A%C2%89%C2%88%C2%87%C2%86%C2%85%C2%84%C2%83%C2%82%C2%81%C2%80%7F~%7D%7C%7Bzyxwvutsrqponmlkjihgfedcba%60_%5E%5D%5C%5BZYXWVUTSRQPONMLKJIHGFEDCBA@?%3E=%3C;:9876543210/.-,+*)('&%25$#%22!%20%1F%1E%1D%1C%1B%1A%19%18%17%16%15%14%13%12%11%10%0F%0E%0D%0C%0B%0A%09%08%07%06%05%04%03%02%01%00");
  join(
    for i in t do
      item(ascii, 255 - index(ascii, i))
    end, "")
end;

(select Customer order reverseAscii(SansAccent(upper('First Name')))).'First Name'

Ordenació per diversos camps

Per ordenar una taula per diversos camps, encadeneu diverses instruccions order by. Per exemple, el codi següent ordena una llista primer pel cognom i després pel nom en cas de cognoms idèntics:

(select Customer order upper(SansAccent('First Name')) order upper(SansAccent('Last Name'))).
---{'First Name'} {'Last Name'}---;

Nota: les instruccions order by van del camp menys significatiu al més significatiu.

Ordenar taules JSON

També es poden ordenar les taules JSON:

Exemple:

var myArray := [ {'prénom' : "Jan"}, {'prénom' : "Fred"}, {'prénom' : "Jacques"}];
myArray order by 'prénom';

També podeu escurçar aquest codi així:

([ {'prénom' : "Jan"}, {'prénom' : "Fred"}, {'prénom' : "Jacques"}] order by 'prénom');

Nota: el compilador no comprova que existeixi la clau que es fa servir per ordenar. Si la clau no existeix, la taula quedarà sense ordenar.