1
我有以下2个表:复杂的交叉表查询问题
1)公司
ID CompanyName Abbreviation Notes
1 CompanyA CA ...
2 CompanyB CB ...
3 CompanyC CC ...
2)PlannedDeployments
ID CompanyID TypeID DepDate NumDeployed
1 1 2 09/2010 5
2 1 2 10/2010 5
3 1 3 09/2010 3
4 1 3 10/2010 3
5 1 4 10/2010 4
6 2 2 12/2010 10
7 2 4 10/2010 1
8 3 2 11/2010 6
注意TYPEID之间的号码1和5描述了什么类型的人正在部署。就本查询而言,我对每个公司的Type2员工感兴趣,然后对每个日期的类型3 & 4的总和感兴趣。我最终想落得一个交叉表,看起来像下面这样:
交叉
Date/Company CompanyA CompanyB CompanyC SumOfTypes3and4
09/2010 5 3
10/2010 5 8
11/2010 6
12/2010 10
的问题是,最后一列 - 3型和4型员工的总和。当前交叉表,我有包括不同之处在于总和柱一切,如下所示:
TRANSFORM Sum(PlannedDeployments.NumDeployed) AS ["NumDeployed"]
SELECT PlannedDeployments.DepDate
FROM PlannedDeployments LEFT JOIN Companies ON Companies.ID=PlannedDeployments.CompanyID
WHERE PlannedDeployments.TypeID=2 AND (PlannedDeployments.DepDate Between FormFieldValue("Form", "Control") AND FormFieldValue("Form", "Control"))
GROUP BY PlannedDeployments.DepDate
PIVOT Companies.CompanyName;
的第二部分即WHERE子句仅通过某种形式的控制的限制的数据。无论如何 - 我在收到最后一栏时遇到了很多麻烦。有人有主意吗?
编辑:大厦由以下Remou提供的解决方案,这里的最终查询结束什么看起来像:
TRANSFORM Sum(PlannedDeployments.NumDeployed) AS ["NumDeployed"]
SELECT PlannedDeployments.DepDate, q.SumOfNumDeployed
FROM (SELECT PlannedDeployments.DepDate, Sum(PlannedDeployments.NumDeployed) AS SumOfNumDeployed
FROM PlannedDeployments
WHERE (((PlannedDeployments.[TypeID]) In (3,4)))
GROUP BY PlannedDeployments.DepDate) AS q
RIGHT JOIN (PlannedDeployments
INNER JOIN Companies ON PlannedDeployments.CompanyID = Companies.ID)
ON q.DepDate = PlannedDeployments.DepDate
WHERE PlannedDeployments.TypeID=2
AND (PlannedDeployments.DepDate Between FormFieldValue("Form", "Control")
AND FormFieldValue("Form", "Control"))
GROUP BY PlannedDeployments.DepDate, q.SumOfNumDeployed
PIVOT Companies.CompanyName;
这让我真正的接近,但它不完全正确。我在最后一栏中查找的是一个总结日期,这与我在上面的查询中看到的并不完全相同。根据我的实际数据,我期待如下:1/2010:2,2/2010:2,3/2010:4,4/2010:6 而我得到的是:1/2010: 2,2/2010:4,3/2010:12,4/2010:24. – wtollett 2010-09-16 01:13:45
您需要受限于表单上日期的子查询?如果是这样,您可以将where语句添加到子查询中。 – Fionnuala 2010-09-16 01:21:41
不是 - 我最后所要做的就是从第二行删除Sum(),然后在倒数第二行的GROUP BY子句中添加'q.SumOfNumDeployed',数据看起来很完美。谢谢你的帮助。 – wtollett 2010-09-16 01:35:32