我有一个查询,分析两个选定年份之间的成本差异。所以我总共有3个查询;
qry_Comp_Year1(CrossTab)
供应商
成本
季
FinYear = [Forms]![frm_Comparison]![cmb_comp_year1]
总计:成本总和
SQL
PARAMETERS [Forms]![frm_Comparison]![cmb_comp_year1] Text ( 255 );
TRANSFORM Sum(tbl_comparison_data.Cost) AS SumOfCost
SELECT tbl_comparison_data.Service, tbl_comparison_data.FinYear, Sum(tbl_comparison_data.cost) AS Total
FROM tbl_comparison_data
WHERE (((tbl_comparison_data.FinYear)=[Forms]![frm_Comparison]![cmb_comp_year1]))
GROUP BY tbl_comparison_data.Service, tbl_comparison_data.FinYear
PIVOT tbl_comparison_data.Quarter;
qry_Comp_Year2(CrossTab)
供应商
成本
季
FinYear = [Forms]![frm_Comparison]![cmb_comp_year2]
总计:成本总和
SQL
PARAMETERS [Forms]![frm_Comparison]![cmb_comp_year2] Text ( 255 );
TRANSFORM Sum(tbl_comparison_data.Cost) AS SumOfCost
SELECT tbl_comparison_data.Service, tbl_comparison_data.FinYear, Sum(tbl_comparison_data.cost) AS Total
FROM tbl_comparison_data
WHERE (((tbl_comparison_data.FinYear)=[Forms]![frm_Comparison]![cmb_comp_year2]))
GROUP BY tbl_comparison_data.Service, tbl_comparison_data.FinYear
PIVOT tbl_comparison_data.Quarter;
查询3(CrossTab)
服务
成本(列名:qry_Comp_Year1.Total qry_Comp_Year2.Total)
差异qry_Comp_Year2.Total - qry_Comp_Year1.Total
SQL
SELECT qry_Comp_Providers.Service, qry_Comp_Year1.Total, qry_Comp_Year2.Total, nz([qry_Comp_Year2.Total])-nz([qry_Comp_Year1.Total]) AS Difference
FROM qry_Comp_Year2 RIGHT JOIN (qry_Comp_Year1 RIGHT JOIN qry_Comp_Providers ON qry_Comp_Year1.Service = qry_Comp_Providers.Service) ON qry_Comp_Year2.Service = qry_Comp_Providers.Service;
输出
Service qry_Comp_Year1.Total qry_Comp_Year2.Total Difference
Clean 225 340 115
Service 678 374 -304
Update 400 410 10
示例数据
ID Service Cost Quarter FinYear
1 Clean 100 Q1 2015-16
2 Update 250 Q2 2015-16
3 Update 150 Q1 2015-16
4 Clean 125 Q3 2015-16
5 Service 178 Q4 2015-16
6 Service 500 Q2 2015-16
7 Clean 175 Q1 2016-17
8 Update 225 Q2 2016-17
9 Update 185 Q1 2016-17
10 Clean 165 Q3 2016-17
11 Service 187 Q4 2016-17
12 Service 187 Q2 2016-17
但是,当您查看查询3时,我希望使用成本列将年份作为列标题,以便明确选择了哪些年份。这可能吗?
答案 0 :(得分:1)
由于最终输出不使用季度数据,因此单个CROSSTAB可以返回年度总计,并将年份列作为列标题。但是,这意味着列标题名称将是动态的,因此使用CROSSTAB作为源来计算差异来构建稳定的查询或报告是不切实际的。
所以不,我没有看到在CROSSTAB列标题中获得多年的实用方法,但并非真的需要。建议您基于Query3构建报表,并在报表上有两个文本框引用表单控件。