sql - 为什么我无法更改 MS Access 报告中数字字段的格式?

标签 sql ms-access formatting report

我有性能数据(95%、100%、120% 等),需要将其格式化为百分比,以便我可以进行排序和条件格式化。打开 MS Access 报告的属性窗口后,我可以更改直接从表中提取的值的格式(常规数字、货币、百分比等),例如 employee_id转移。但其他的,例如 [6 周前][5 周前] 和 on down 不允许我这样做。这是因为该字段是 IIF() 语句的结果吗?以下查询是我的原始查询:

SELECT 
D2s_roster_tbl.employee_id AS ID,
D2s_roster_tbl.employee_name AS Name, 
D2s_roster_tbl.position_desc AS [Position],
D2s_roster_tbl.adj_hire_dt AS [Hire DT], 
D2s_roster_tbl.shift_nbr AS Shift, 
D2s_roster_tbl.supervisor,
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/09],[trndPerformanceQry_crosstab].[11/09]) AS [6 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/16],[trndPerformanceQry_crosstab].[11/16]) AS [5 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/23],[trndPerformanceQry_crosstab].[11/23]) AS [4 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/30],[trndPerformanceQry_crosstab].[11/30]) AS [3 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/07],[trndPerformanceQry_crosstab].[12/07]) AS [2 wks ago], 
IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/14],[trndPerformanceQry_crosstab].[12/14]) AS [Last wk], 

FROM 
((D2s_roster_tbl 
LEFT JOIN trndLoaderPerformanceTbl_Crosstab ON D2s_roster_tbl.employee_id = trndLoaderPerformanceTbl_Crosstab.employee_id) 
LEFT JOIN trndPerformanceQry_Crosstab ON D2s_roster_tbl.employee_id = trndPerformanceQry_Crosstab.employee_id)
LEFT JOIN trndPerfFormatPercent_Crosstab ON D2s_roster_tbl.employee_id = trndPerfFormatPercent_Crosstab.employee_id;

所以我想好吧,它不想格式化这样的条件语句的结果。因此,我将一系列 IIF() 放在 FROM 语句中并直接选择这些值,如下所示:

SELECT
D2s_roster_tbl.employee_id AS ID,
D2s_roster_tbl.employee_name AS Name,
D2s_roster_tbl.position_desc AS [Position],
D2s_roster_tbl.adj_hire_dt AS [Hire DT],
D2s_roster_tbl.shift_nbr AS Shift,
D2s_roster_tbl.supervisor,
j.[6 wks ago],
j.[5 wks ago],
j.[4 wks ago],
j.[3 wks ago],
j.[2 wks ago],
j.[Last wk]

FROM
((D2s_roster_tbl
LEFT JOIN trndLoaderPerformanceTbl_Crosstab ON D2s_roster_tbl.employee_id = trndLoaderPerformanceTbl_Crosstab.employee_id)
LEFT JOIN trndPerformanceQry_Crosstab ON D2s_roster_tbl.employee_id = trndPerformanceQry_Crosstab.employee_id)
LEFT JOIN (SELECT
    d2s_roster_tbl.employee_id,
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/09],[trndPerformanceQry_crosstab].[11/09]) AS [6 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/16],[trndPerformanceQry_crosstab].[11/16]) AS [5 wks ago],
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/23],[trndPerformanceQry_crosstab].[11/23]) AS [4 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[11/30],[trndPerformanceQry_crosstab].[11/30]) AS [3 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/07],[trndPerformanceQry_crosstab].[12/07]) AS [2 wks ago], 
    IIf([D2s_roster_tbl].[Position_desc] Like "*loader*",[trndLoaderPerformanceTbl_Crosstab].[12/14],[trndPerformanceQry_crosstab].[12/14]) AS [Last wk]

   FROM 
   ((D2s_roster_tbl 
   LEFT JOIN trndLoaderPerformanceTbl_Crosstab ON D2s_roster_tbl.employee_id = trndLoaderPerformanceTbl_Crosstab.employee_id) 
   LEFT JOIN trndPerformanceQry_Crosstab ON D2s_roster_tbl.employee_id = trndPerformanceQry_Crosstab.employee_id))  AS J ON d2s_roster_tbl.employee_id = j.employee_id;

它也不允许我格式化此查询中的[n wks ago] 列。我原来的绩效表有 4 列:employee_idweek_ending_dtgoal_hrshrs_worked。这些数据是过去 6 周的数据,因此我创建了交叉表查询,为每周提供不同的列(我们使用它来查看每周的性能趋势)。加载器性能与其他性能分开存储,因此这就是我在查询中需要 IIF() 的原因。有没有某种方法可以获取此信息,将最终性能值保留为可以更改格式的数值?

This here是我最初的问题,但我缺乏具体性意味着这个答案不可行。谢谢!

最佳答案

事实证明,为交叉表提供数据的查询具有以下性能表达式:

IIf([d2s_performance_tbl].[hrs_worked]=0,"", Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl].[hrs_worked]),2)).

删除 IIF() 只留下

回合(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl].[hrs_worked]),2)

将值保留为数字,这会贯穿到报告中,允许我更改为百分比并排序以及数字值附带的所有其他有趣的东西。

关于sql - 为什么我无法更改 MS Access 报告中数字字段的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705615/

相关文章:

PHP:在 SQL 表上的特定行处启动 while 循环

php - 通过 2 个嵌套循环对同一查询进行 2 次循环

sql - SELECT AS 问题

python - 在 Python 中将文件输入行读取到多个列表中

.net - 如何将 NLog 的文件名设置为进程开始日期?

mysql - 没有多行的 SQL 连接

sql-server - Microsoft Access 错误 : "Because of your security settings and current security policy, this control is disabled"

ms-access - 表字段说明 - MS Access

c++ - 以编程方式压缩和修复数据库

reporting-services - 表中表 | Power BI 报表生成器