每个月我都会运行一个交叉表查询,然后使用访问报告对其进行“修改”。
CROSSTAB SQL:
TRANSFORM Sum(myTable.Field1) AS SumOfField1
SELECT myTable.Date, Sum(myTable.Field1) AS [Daily Totals]
FROM myTable
GROUP BY myTable.Date
PIVOT myTable.Field2;
其中Field1是$ Amount,而Field2(对于此示例)要么是“Option1”,“Option2”,要么是“Option3”。
典型的串联结果:
Date Option1 Option2 Option3
----- -------- -------- --------
Day1 $5.00 -$2.37
Day2 $3.15
Day3 $2.22
因为100个中有99个我将在给定月份的每个“选项”中获得数据,所以我创建了一个报告,以“漂亮”的格式清理交叉表。然而,这个月,我的原始数据没有任何“Option3”值。因此,Option3的交叉表列不会出现在我的查询结果中。然后,由于报告直接从交叉号和&按名称查找每个选项列,这会导致我的报告中断错误:
Microsoft Access数据库引擎无法将“[Option3]”识别为 有效的字段名称或表达。
我在故障排除方面做了一些尝试:
您输入的表达式包含无效语法
此时,我对如何运行现有报告感到茫然(仅显示“Option3”的0列)。
答案 0 :(得分:3)
Specify column headings IN
子句中包含PIVOT
列表。
PIVOT myTable.Field2 IN ('Option1', 'Option2', 'Option3');
无论源数据是否包含具有这些值的任何行,这些列标题都将包含在查询结果集中(按列出的顺序)。
副作用是,如果交叉表数据源可能包含 Option4 ,则它不会包含在结果列中。这对您的报告很好,因为它没有设计为期望 Option4 列。但如果您在其他地方使用交叉表查询,则可能会引起关注。
在报告中,您可以使用Nz()
将零替换为选项列中的Null。