MS Access Query Sort with Percents: почему сортировка только по первой цифре?

У меня есть следующий запрос (который работает отлично), который вытягивает ID, дату окончания недели, производительность и сверхурочные.

SELECT 
d2s_roster_tbl.employee_id, 
Format([WEEK_ENDING_DT],"mm/dd") AS week,
IIf([d2s_performance_tbl].[hrs_worked]=0,"",IIf([d2s_roster_tbl.position_desc] Like
    "*selector*",FormatPercent(Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl].[hrs_worked]),2),0) & 
    [d2s_performance_tbl].[lift_flag],IIf([d2s_roster_tbl.position_desc] Like
    "*operator*",FormatPercent(Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl].[hrs_worked]),2),0),""))) AS Perf,
d2s_performance_tbl.OT

FROM 
d2s_roster_tbl 
INNER JOIN d2s_performance_tbl ON D2s_roster_tbl.employee_id = d2s_performance_tbl.employee_id;

Когда я сортирую по OT, она сортируется правильно. Когда я сортирую по perf (рассчитанный процент), он сортируется только по первой цифре - сортировка по убыванию показывает такие результаты:

6%
52%
500%
475%
47%
4%
39%
30%
23%
220%
199%
19%
188%

Что может быть причиной его сортировки? Все числовые поля в d2s_performance_tbl имеют 2 десятичных знака в следующих форматах:

Field Size: Double
Format: General Number
Decimal Places: Auto

Спасибо!

1 ответ

Решение

Я бы предположил, что это вызвано FormatPercent Функция, которая, насколько я понимаю, может быть только логичной, заключается в том, что она преобразуется в строку. Единственный способ получить "%" в значениях - это если это строка. Это то, что заставляет твой род выключаться. Удалить FormatPercent и посмотрим, что получится.

Если вы хотите отформатированное значение, вы можете добавить другой столбец к выходным данным в качестве формата и отсортировать по вычисленному значению, которое не отформатировано, чтобы получить отформатированный столбец в правильном порядке.

Другие вопросы по тегам