【问题标题】:MS Access Query Sort with Percents: Why sort only by first digit?MS Access 查询按百分比排序:为什么只按第一个数字排序?
【发布时间】:2014-01-08 11:55:48
【问题描述】:

我有以下查询(运行良好),它会提取 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 排序时,它会正确排序。当我按性能(计算的百分比)排序时,它似乎只按第一个数字排序——降序排序显示如下结果:

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

谢谢!

【问题讨论】:

    标签: sql sorting ms-access percentage


    【解决方案1】:

    我会假设这是由FormatPercent 函数引起的,据我了解并且唯一合乎逻辑的是它转换为字符串。您可以在值中包含“%”的唯一方法是它是一个字符串。这就是导致您的排序关闭的原因。删除FormatPercent 看看会发生什么。

    如果您想要格式化的值,您可以在输出中添加另一列作为格式,并对未格式化的计算结果进行排序,以使您的格式化列以正确的顺序排列。

    【讨论】:

    • 这确实回答了我指定的问题,但对报告的最终目标没有帮助。此结果集进入交叉表查询,然后进入主查询,我的报告基于该查询。我将尝试通过交叉表和主查询包含“虚拟”性能数据,看看会发生什么。我有一个表单,可以让用户按任何字段排序(asc 或 desc)。我想我可以在主查询中包含这两个值,只显示报告中的格式,然后调用原始数据进行排序。 Access 不允许我更改报告属性中的字段格式
    • @TrevorD 很高兴您可以尝试解决问题。不幸的是,Access 有很多陷阱,可能应该作为数据库完全废弃,但我知道有时它不是一个选择,特别是对于那些想要便宜的东西并且能够快速启动和运行的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多