Az ORDER BY nem kaphat paramétert, de egy trükkel meg lehet oldani a paraméteres rendezést.
(legalábbis PostgreSQL alatt ez működik,
www.postgresql.org/docs/9.5/static/tutorial-window.html)
A lekérdezést így kell megírni:
SELECT id,name,size
FROM table
ORDER BY
CASE :order
WHEN 0 THEN (RANK() OVER (ORDER BY id))
WHEN 1 THEN (RANK() OVER (ORDER BY name))
WHEN 2 THEN (RANK() OVER (ORDER BY size DESC))
ELSE (RANK() OVER (ORDER BY name, size))
END;
Ez után, a rendezés paraméter (:order) kiválasztja az előre megírt rendezések egyikét:
SQLQuery.ParamByName('order').AsInteger := 0; // rendezés 'id' szerint
SQLQuery.ParamByName('order').AsInteger := 1; // rendezés 'name' szerint
SQLQuery.ParamByName('order').AsInteger := 2; // rendezés csökkenő 'size' szerint
SQLQuery.ParamByName('order').AsInteger := 99; // rendezés 'name' és 'size' szerint (ELSE ág)