【发布时间】:2014-01-09 10:24:04
【问题描述】:
我有需要格式化为百分比的性能数据(95%、100%、120% 等),以便我可以排序和有条件地格式化。打开我的 MS Access 报告的属性窗口后,我可以更改直接从表中提取的值的格式(通用数字、货币、百分比等),例如 employee_id 或 shift。但是其他人,例如[6 wks ago]、[5 wks ago] 以及向下不允许我这样做。这是因为该字段是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()s这一系列放在了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_id、week_ending_dt、goal_hrs 和 hrs_worked。这些数据是过去 6 周的数据,因此我创建了交叉表查询来为每周提供不同的列(我们使用它来查看每周的性能趋势如何)。加载器性能与其他性能分开存储,这就是我在查询中需要IIF() 的原因。是否有某种方法可以获取此信息,将最终性能值保留为可以更改格式的数值?
This here 是我最初的问题,但我缺乏特异性意味着这个答案是不可行的。谢谢!
【问题讨论】:
-
也许列值是字符串而不是数字。
-
好问题。我很好奇这里的答案,我敢肯定你现在已经厌倦了 Access。属性窗口是否提供任何格式选项?
-
原来提供交叉表的查询具有以下性能表达式: IIf([d2s_performance_tbl].[hrs_worked]=0,"", Round(([d2s_performance_tbl].[goal_hrs]/[d2s_performance_tbl] ].[hrs_worked]),2))。删除 IIF 并仅保留计算将其保留为数值并允许满足排序/格式化。展望未来,我应该假设“”始终是一个字符串吗?或者 IIF 函数将其作为字符串返回?
标签: sql ms-access formatting report