多个数据点的交叉表查询

时间:2017-10-03 15:20:38

标签: ms-access

我有一张跟踪员工质量评估数据的表格。它包括员工姓名,跟踪重要项目的5是/否字段以及用户将每项任务作为列标题的日期。每位员工每月获得10条记录,因此它包含了大量关于员工在这5项任务中的表现的数据。

我想要一份报告,向我展示这5个是/否字段的月平均值:上诉,NRP,流失,协议和重新发布。我希望那些是行标题。我希望列标题是连续的Months,而Averages是值。我可以使用交叉表查询来执行单个项目,例如avg:Appeal作为值,用户作为行标题。如何构建我的查询以使用所有5个是/否字段?他们希望结果看起来像:

Table image showing how I want it to look

对正确答案的评论: June7想出了一个很棒的答案!我在DataUNION查询中将True更改为False,因为我想要Accuracy百分比,而true表示员工评估时出错。我还在几个领域中添加了我之前没有提到过的内容。非常感谢你帮助6月7日擦洗!阅读你写的内容激励我开始学习Lynda的SQL课程。我知道它的基本但你必须从某个地方开始,我已经到了访问的内置功能并不适合我的地步。希望在接下来的问题中,我能够解决下面评论员的担忧,这些担忧让我感到不安,因为我没有先为自己编写代码。 June7's revised Code

1 个答案:

答案 0 :(得分:0)

考虑:

Query1:DataUNION
SELECT ID AS SourceID, Emp, Year([TaskDate]) AS Yr, Format([TaskDate], "mmm") AS Mo, "Appeal" AS Trend FROM Data WHERE Appeal=True UNION SELECT ID, Emp, Year([TaskDate]), Format([TaskDate], "mmm"), "NRP" FROM Data WHERE NRP = True UNION SELECT ID, Emp, Year([TaskDate]), Format([TaskDate], "mmm"), "Churn" FROM Data WHERE Churn = True UNION SELECT ID, Emp, Year([TaskDate]), Format([TaskDate], "mmm"), "Protocol" FROM Data WHERE Protocol = True UNION SELECT ID, Emp, Year([TaskDate]), Format([TaskDate], "mmm"), "Resub" FROM Data WHERE Resub = True;

Query2:DataCOUNT
SELECT DataUNION.Yr, DataUNION.Mo, DataUNION.Trend, Count(DataUNION.Emp) AS CountOfEmp, Q.CntYrMo, Count([Emp])/[CntYrMo]*100 AS Pct FROM (SELECT Year([TaskDate]) AS Yr, Format([TaskDate],"mmm") AS Mo, Count(Data.ID) AS CntYrMo FROM Data GROUP BY Year([TaskDate]), Format([TaskDate],"mmm")) AS Q INNER JOIN DataUNION ON (Q.Yr = DataUNION.Yr) AND (Q.Mo = DataUNION.Mo) GROUP BY DataUNION.Yr, DataUNION.Mo, DataUNION.Trend, Q.CntYrMo;

QUERY3:
TRANSFORM First(DataCount.Pct) AS FirstOfPct SELECT DataCount.Yr, DataCount.Trend FROM DataCount GROUP BY DataCount.Yr, DataCount.Trend PIVOT DataCount.Mo In ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

相关问题