Сортировка результатов как параметр
Можно ли и как в параметрах отчёта, выбираемых пользователем, задать значение для сортировки в запросе?
В запросе выбираются несколько полей из БД, вычисляется несколько выражений с этими полями. Нужно сделать сортировку в зависимости от выбора пользователя, по какому результату. Например в запросе
SELECT es.sal, em.den, em.nad,
SUM(es.sal) AS sum_sal,
SUM(em.den) * 0.03 AS sum_den
FROM ***
WHERE ***
ORDER BY :sort
надо определить параметр :sort по желанию пользователя. Это могут быть em.nad, sum_sal или sum_den. Результаты запроса выдаются в master-e, если это имеет какое-то значение.
В запросе выбираются несколько полей из БД, вычисляется несколько выражений с этими полями. Нужно сделать сортировку в зависимости от выбора пользователя, по какому результату. Например в запросе
SELECT es.sal, em.den, em.nad,
SUM(es.sal) AS sum_sal,
SUM(em.den) * 0.03 AS sum_den
FROM ***
WHERE ***
ORDER BY :sort
надо определить параметр :sort по желанию пользователя. Это могут быть em.nad, sum_sal или sum_den. Результаты запроса выдаются в master-e, если это имеет какое-то значение.
Комментарии
Если из отчета или с клиента можно сначала юзверю показать диалог, что бы он выбрал как нужно сортировать а потом дописать к Select-у order by с выбранными полями сортировки.
Вам необходимо модифицировать запрос перед его выполнением.
1. Запишите выражение ORDER BY запроса, например, как
ORDER BY em.den
2. Тогда код для модификации запроса будет выглядеть следующим образом:
sSQL := MyQuery.SQL;
sSQL := ReplaceStr(sSQL, 'ORDER BY em.den', 'ORDER BY ' + sOrderByField);
MyQuery.SQL := sSQL;
переменной sOrderByField надо присвоить название колонки, по которой нужна сортировка: 'em.nad', ....
Диалог да, показываю, только не получается оттуда данные передать в order by
Где FIELDS это твоя строковая переменная с выбранными полянками.