使用总计查询查询结果作为条件返回预期的结果平方数

时间:2018-02-22 14:06:42

标签: sql subquery ms-access-2010 totals

背景

我正在构建一个Access 2010数据库,其中包含一个表[ControllerAdjustments],该表通过[AdjustmentID]自动编号字段,[ControllerID]字段,[AdjustmentDate]字段,[Setpoint]字段跟踪对控制器所做的所有调整和[电源]字段。 [Power]字段表示进行调整时的功率级别。最终我需要两个查询来返回两组结果,一个查询应该返回所有控制器的当前状态(基本上是每个控制器上进行的最近调整),另一个应该返回在每个控制器上进行的最新调整,其中功率级别是100%。我计划使用这些查询中的每一个来提供报告。注意:字段名称在输入时为方便起见略有变化,代码块中给出了全名......

方式

我首先关注当前查询,并认为我只是复制它并进行必要的更改以创建100%查询。我开始在[ControllerAdjustments]表上进行总计查询,其中[ControllerID]为Group By字段,[AdjustmentDate]为返回Max值的字段。这个查询确切地返回了我预期的记录数,在查看了我在表中放入的样本伪造数据进行检查之后,它似乎准确地返回了我需要的记录。然后我创建了一个Select Query,它返回了我在Current Report中想要的所有字段,即[ControllerAdjustments]表和上游相关表中的相关记录。然后,我在Select Query中将[ControllerID]字段的条件设置为等于[Total_CurrentContAdjs]![ControllerID]和Select Query to [Total_CurrentContAdjs]中的[AdjustmentDate]![MaxOfAdjustmentDate]。运行此查询将返回我想要的内容。此查询的SQL如下:

SELECT List_Units.UnitID, List_EDTanks.TankNameShort, List_Controllers.ControllerType, ControllerAdjustments.AdjustmentDate, ControllerAdjustments.ControllerSetpoint, ControllerAdjustments.RxPower
FROM Total_ContAdjsCurrent, ((List_Units INNER JOIN List_EDTanks ON List_Units.UnitID = List_EDTanks.UnitID) INNER JOIN List_Controllers ON List_EDTanks.EDTankID = List_Controllers.EDTankID) INNER JOIN ControllerAdjustments ON List_Controllers.ControllerID = ControllerAdjustments.ControllerID
WHERE (((ControllerAdjustments.AdjustmentDate)=[Total_ContAdjsCurrent]![MaxOfAdjustmentDate]) AND ((ControllerAdjustments.ControllerID)=[Total_ContAdjsCurrent]![ControllerID]))
ORDER BY List_Units.Unit, List_EDTanks.TankSortOrder, List_Controllers.ControllerType DESC;

然后我复制了Totals查询,并为Power添加了一列,选中了Where,unchecked show,并在100中添加了条件。这按预期工作。然后我复制了我的选择查询,并更改了条件字段以指向我的新100%总计查询。这是我的问题开始的地方。

问题

第二个100%查询似乎不喜欢这个标准,因为它最初会抛出熟悉的参数窗口。这是第二个查询的SQL语句,除了引用100%总计查询外几乎相同:

SELECT List_Units.UnitID, List_EDTanks.TankNameShort, List_Controllers.ControllerType, ControllerAdjustments.AdjustmentDate, ControllerAdjustments.ControllerSetpoint, ControllerAdjustments.RxPower
FROM Total_ContAdjsCurrent, Total_ContAdjsStdyState, ((List_Units INNER JOIN List_EDTanks ON List_Units.UnitID = List_EDTanks.UnitID) INNER JOIN List_Controllers ON List_EDTanks.EDTankID = List_Controllers.EDTankID) INNER JOIN ControllerAdjustments ON List_Controllers.ControllerID = ControllerAdjustments.ControllerID
WHERE (((ControllerAdjustments.AdjustmentDate)=[Total_ContAdjsStdyState]![MaxOfAdjustmentDate]) AND ((ControllerAdjustments.ControllerID)=[Total_ContAdjsStdyState]![ControllerID]))
ORDER BY List_Units.Unit, List_EDTanks.TankSortOrder, List_Controllers.ControllerType DESC;

最初,Access没有将我的Totals查询添加到设计视图中的show table框中,因为其结果未直接用于Select Query。所以,我将Totals查询添加到顶部,这允许我的查询在不询问参数的情况下运行,但现在它返回我期望平方的结果数。基本上如果我期待3个记录:1,2和3,它给我:1,1,1,2,2,3,3和3.对于我的生活,我无法弄清楚为什么它正在这样做,特别是因为我的当前查询的完全相同的设置返回了预期的...我想可能我的总计查询中的where子句与它有关,所以我为[ControllerAdjustments]创建了一个Select Query返回所有记录的表格,其中包含100的权力。然后我将此查询用于我的总计查询而不是总计查询本身,但这没有做任何不同的事情。我很茫然,不知道我能做些什么才能得到我想要的结果。欢迎任何建议,谢谢!

1 个答案:

答案 0 :(得分:0)

我通过简单地从头开始重建我的100%查询来解决这个问题。查看SQL语句时,它们看起来完全相同,但由于某种原因,我的查询现在返回正确数量的记录。我不知道为什么会这样有效,而且如果有时间有人关心的话,我仍然很好奇首先出了什么问题,但最初的问题陈述已得到纠正 - 即使我不知道我是怎么做到的哈哈...