小编典典

如何使用另一个表字段作为MS Access的标准

sql

这是MS Access相关的查询。

我有一个包含三列的表:FName, FValue and VDate在MS
Access中。(实际表很大,但是下面的示例仅供参考)!http://postimg.org/image/bx0grwoa3/

现在,我想获得以下类型的查询输出:获取每个唯一名称的最小季度值。例如:
http://postimg.org/image/je1w7gdi1/

到目前为止,通过使用以下命令,我可以通过硬编码标准获得四分之一的输出(在MS Access中)

SQL字符串是:

SELECT Table.FName, Min(Table.FValue) AS MinOfFValue, First(Table.VDate) AS FirstOfVDate
FROM [Table] LEFT JOIN [Table] AS Table_1 ON Table.FValue = Table_1.FValue
WHERE (((Table.VDate)>#3/31/2014# And (Table.VDate)<#7/1/2014#))
GROUP BY Table.FName;

现在,我希望日期不是硬编码的放置日期,而是要在其中存在季度名称(从日期到日期)的表的一部分中,Access将它们一一对应并提供所需的输出。

提前致谢。


阅读 185

收藏
2021-04-14

共1个答案

小编典典

第二个问题比第一个困难。我的方法是使用3个独立的查询来获取答案:

Query1为原始表中的每个记录返回一条记录,并从四分之一表中添加年份和四分之一。请注意,除了使用季度表之外,您还可以轻松地从日期开始计算年份和季度。

SELECT Table.FName, Table.FValue, Table.VDate, Quarters.Yr, Quarters.Qtr
FROM [Table], Quarters
WHERE (((Table.VDate)>=[start] And (Table.VDate)<=[end]));

Query2使用Query1的结果,并找到所需的最小值:

SELECT Query1.FName, Query1.Yr, Query1.Qtr, Min(Query1.FValue) AS MinValue
FROM Query1
GROUP BY Query1.FName, Query1.Yr, Query1.Qtr;

Query3匹配Query1和Query2的结果,以显示达到最小值的数据。请注意,我使此查询为Sum,并使用First(VDate),假设最小值可能已多次出现,而您只需要第一次出现。

SELECT Query1.FName, Query1.Yr, Query1.Qtr, Query2.MinValue, First(Query1.VDate) AS MidDate, Query1.FValue
FROM Query1 INNER JOIN Query2 ON (Query1.Qtr = Query2.Qtr) AND (Query1.FValue = Query2.MinValue) AND (Query1.FName = Query2.FName)
GROUP BY Query1.FName, Query1.Yr, Query1.Qtr, Query2.MinValue, Query1.FValue;

在一个查询中可能有一种聪明的方法来完成所有这些操作,但这通常是解决类似问题的方法。

2021-04-14