将查询中的列名更改为MS Access

时间:2017-07-12 11:11:29

标签: ms-access

我有一个查询,分析两个选定年份之间的成本差异。所以我总共有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时,我希望使用成本列将年份作为列标题,以便明确选择了哪些年份。这可能吗?

1 个答案:

答案 0 :(得分:1)

由于最终输出不使用季度数据,因此单个CROSSTAB可以返回年度总计,并将年份列作为列标题。但是,这意味着列标题名称将是动态的,因此使用CROSSTAB作为源来计算差异来构建稳定的查询或报告是不切实际的。

所以不,我没有看到在CROSSTAB列标题中获得多年的实用方法,但并非真的需要。建议您基于Query3构建报表,并在报表上有两个文本框引用表单控件。