MS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合
Posted
技术标签:
【中文标题】MS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合【英文标题】:MS Access - Union a two SELECT statements with one statement containing Aggregate function 【发布时间】:2017-04-01 19:38:02 【问题描述】:假设我有这张数据表,[Table]:
[ColumnA] [ColumnB]
Field1 10
Field2 20
Field3 30
Field4 40
Field5 50
我有两个 SELECT 语句。一种是选择要显示的字段范围:
SELECT * FROM [Table];
另一种是计算这些字段的标准差和平均值:
SELECT StDev([ColumnB]) AS [Standard Deviation], Avg([ColumnB]) AS [Average] FROM [Table];
有没有办法将这两个查询合并在一起,或者如果可能的话,合并到一个查询中?
所以最终结果将如下所示:
[ColumnA] [ColumnB] [Standard Deviation] [Average]
Field1 10 XX YY
Field2 20 XX YY
Field3 30 XX YY
Field4 40 XX YY
Field5 50 XX YY
但是,我知道从第一个查询开始,它将显示总共 5 行记录。但是从第二个查询开始,它只会显示一条记录。在这种情况下,是否可以在 [Standard Deviation] 和 [Average] 列中指示相同的结果?所以当我根据这些数据绘制图表时,它会显示为一系列可以连接成水平直线的点。
不确定解释是否足够。 请帮忙。
【问题讨论】:
是整个表的标准差和平均值还是基于另一列? @ClintB StDev 和 Avg 基于 [ColumnB]。 【参考方案1】:如果第二个查询只返回一行,您可以使用如下查询:
SELECT TABLE.ColumnA
,TABLE.ColumnB
,[Standard Deviation]
,[Average]
FROM [Table]
,(
SELECT StDev([ColumnB]) AS [Standard Deviation]
,Avg([ColumnB]) AS [Average]
FROM [Table]
);
【讨论】:
如果第一个查询返回五行,第二个查询只返回一行,会不会出错?这是否意味着剩下的 4 行是空的? 不,这不是错误。在这里,我们对两个源进行完全连接,它将产生 #_Rows_In_Source1 * #_Rows_In_Source2 行,在您的情况下 5 * 1=5 行,所有行都将按照要求包含数据。 如果我想在第一个和第二个查询中都应用 WHERE 子句,我该怎么做?我应该做这样的事情吗?SELECT TABLE.ColumnA, TABLE.ColumnB, [Standard Deviation], [Average] FROM [Table] WHERE [ColumnB] > 10, (SELECT StDev([ColumnB]) AS [Standard Deviation], Avg([ColumnB]) AS [Average] FROM [Table] WHERE [ColumnB] > 10);
是的,没错,两个查询都要加条件以上是关于MS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询